풀이 방법
처음엔 그냥 승 패를 비교하고 무승부일경우 따로 고려해서 풀이했는데 올바른 풀이가 아니었다.
고려해야 할 게
각 팀들은 중복없이 다른 팀들과 경기를 해야하고 같은 팀과 두번 이상 할 수 없다. 그래서 총 경기수는 30번이 된다.
이를 고려해서 dfs로 풀이했다.
내 코드
package com.company;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int[][] arr;
static boolean check;
static int[] teamA = {0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 3, 3, 4};
static int[] teamB = {1, 2, 3, 4, 5, 2, 3, 4, 5, 3, 4, 5, 4, 5, 5};
public static void main(String args[]) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
for (int tc = 0; tc < 4; tc++) {
int total = 0;
arr = new int[6][3];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 3; j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
total += arr[i][j];
}
}
if (total != 30) {
System.out.print(0 + " ");
continue;
}
if (dfs(0)) {
System.out.print(1 + " ");
} else {
System.out.print(0 + " ");
}
}
}
static boolean dfs(int count) {
if (count == 15) {
return true;
}
if (arr[teamA[count]][0] > 0 && arr[teamB[count]][2] > 0) {
arr[teamA[count]][0]--;
arr[teamB[count]][2]--;
if (dfs(count + 1))
return true;
arr[teamA[count]][0]++;
arr[teamB[count]][2]++;
}
if (arr[teamA[count]][2] > 0 && arr[teamB[count]][0] > 0) {
arr[teamA[count]][2]--;
arr[teamB[count]][0]--;
if (dfs(count + 1))
return true;
arr[teamA[count]][2]++;
arr[teamB[count]][0]++;
}
if (arr[teamA[count]][1] > 0 && arr[teamB[count]][1] > 0) {
arr[teamA[count]][1]--;
arr[teamB[count]][1]--;
if (dfs(count + 1))
return true;
arr[teamA[count]][1]++;
arr[teamB[count]][1]++;
}
return false;
}
}
'코딩테스트 > [백준] 코딩테스트 연습' 카테고리의 다른 글
스카이라인 쉬운거 - 1863번 (0) | 2022.02.04 |
---|---|
불 - 5427번 (0) | 2022.01.24 |
간선 이어가기2 - 14284번 (0) | 2022.01.21 |
백양로 브레이크 - 11562번 (0) | 2022.01.19 |
회문 - 17609번 (0) | 2021.12.30 |