728x90
반응형
풀이 :
인영이가 가질 수 있는 카드 9개를 rem_card[]에 넣어놓고, game()를 활용해서 인영이의 카드(arrB[])에 rem_card를 하나씩 넣음. arrB가 다 차면 arrA랑 비교
dfs를 활용한 문제. 인영이가 가질 수 있는 카드들은 check[1~18]을 활용해서 구함
Code
public class Solution6808 {
static int[] arrA, arrB;
static int[] rem_card;
static boolean[] visited;
static int win;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for (int tc = 1; tc <= T; tc++) {
arrA = new int[9];
arrB = new int[9];
rem_card = new int[9];
visited = new boolean[9];
win = 0;
boolean[] check = new boolean[19]; // 1 ~ 18
check[0] = true;
for (int i = 0; i < 9; i++) {
arrA[i] = sc.nextInt();
check[arrA[i]] = true;
}
int idx = 0;
for (int i = 1; i <= 18; i++) {
if (!check[i]) {
rem_card[idx++] = i;
}
}
game(0);
System.out.println("#" + tc + " " + win + " " + (362880 - win));
}
}
private static void game(int cnt) {
if (cnt == 9) { // 인영이의 카드가 다 차면 규영이의 카드와 비교
int sumA = 0;
int sumB = 0;
for (int i = 0; i < 9; i++) {
if (arrA[i] > arrB[i]) {
sumA += arrA[i] + arrB[i];
} else sumB += arrA[i] + arrB[i];
}
if (sumA > sumB) win++;
return;
}
for (int i = 0; i < 9; i++) {
if (visited[i]) continue;
arrB[cnt] = rem_card[i]; // 인영이가 가질 수 있는 카드들을 조합해서 인영이의 카드 패를 만들어줌
visited[i] = true;
game(cnt + 1);
visited[i] = false;
}
}
}
728x90
반응형
'SWEA' 카테고리의 다른 글
swea 9280 [D3] 진용이네 주차타워 JAVA (2) | 2023.12.04 |
---|---|
swea 9229 [D3] 한빈이와 Spot Mart JAVA (0) | 2023.11.29 |
swea 6485 [D3] 삼성시의 버스 노선 JAVA (0) | 2023.11.29 |
swea 6190 [D3] 정곤이의 단조 증가하는 수 JAVA (1) | 2023.11.29 |
swea 5948 [D3] 새샘이의 7-3-5 게임 JAVA (0) | 2023.11.29 |