Coding - Algo/Java
[SWEA] 6808번:규영이와 인영이의 카드게임 (Java 자바)
jainn
2021. 8. 12. 13:16
728x90
풀이 및 소스코드
규영이가 갖고있지 않은 카드를 인영이가 갖고있기 때문에
인영이의 카드를 구하기 위해서 IntStream 이라는 인터페이스를 사용했다.
gy = {1, 2, 5, 6};
int num = 3;
if(!IntStream.of(gy).anyMatch(x-> x == num)) { //gy 이라는 배열 안에 num 이라는 정수가 있는지 확인
iy[cnt++] = num; //!를 붙혔으므로 정수가 없으면 인영이 배열에 넣기 !
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.stream.IntStream;
public class Solution {
static int[] gy = new int[9];
static int[] iy = new int[9];
static boolean[] v;
static int win_cnt, lose_cnt;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder sb = new StringBuilder();
int t = Integer.parseInt(br.readLine());
for(int tc=1;tc<=t;tc++) {
st = new StringTokenizer(br.readLine());
for(int i=0;i<9;i++) {
gy[i] = Integer.parseInt(st.nextToken());
}
win_cnt = 0;
lose_cnt = 0;
v = new boolean[19];
int cnt = 0;
for(int i=1;i<=18;i++) { //인영이의 값 넣기
int num = i;
if(!IntStream.of(gy).anyMatch(x-> x == num)) {
iy[cnt++] = num;
}
}
card_game(0, 0, 0);
sb.append("#").append(tc).append(" ").append(win_cnt).append(" ").append(lose_cnt).append("\n");
}
System.out.println(sb);
}
public static void card_game(int round, int g_sum, int y_sum) {
if(round == 9) {
if(g_sum>y_sum) {
win_cnt++;
}else if(g_sum<y_sum) {
lose_cnt++;
}
return;
}
for(int i=0;i<9;i++) {
if(!v[i]) {
v[i] = true;
if(gy[round]>iy[i]) { //규영이가 이겼으면,
card_game(round+1, g_sum+gy[round]+iy[i], y_sum);
}else if(gy[round]<iy[i]) {
card_game(round+1, g_sum, y_sum+iy[i]+gy[round]);
}else {
card_game(round+1, g_sum, y_sum);
}
v[i] = false;
}
}
}
}
반응형