내 코드
package com.company;
import java.io.*;
import java.util.*;
public class Main {
static boolean[][] visitedA, visitedB, visitedC;
static int[][] arr;
static List<int[]> list;
static boolean check;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
arr = new int[9][9];
visitedA = new boolean[9][10];
visitedB = new boolean[9][10];
visitedC = new boolean[9][10];
list = new ArrayList<>();
check = false;
for (int i = 0; i < 9; i++) {
String s = br.readLine();
for (int j = 0; j < 9; j++) {
arr[i][j] = s.charAt(j) - '0';
if (arr[i][j] != 0) {
visitedA[i][arr[i][j]] = true;
visitedB[j][arr[i][j]] = true;
visitedC[(i / 3) * 3 + j / 3][arr[i][j]] = true;
} else {
list.add(new int[]{i, j});
}
}
}
dfs(0, 0);
}
static void dfs(int index, int count) {
if (check)
return;
if (count == list.size()) {
for (int[] a : arr) {
for (int i : a) {
System.out.print(i);
}
System.out.println();
}
check = true;
return;
}
int[] node = list.get(index);
for (int i = 1; i < 10; i++) {
if (!visitedA[node[0]][i] && !visitedB[node[1]][i] && !visitedC[(node[0] / 3) * 3 + node[1] / 3][i]) {
visitedA[node[0]][i]= true;
visitedB[node[1]][i] = true;
visitedC[(node[0] / 3) * 3 + node[1] / 3][i] = true;
arr[node[0]][node[1]] = i;
dfs(index + 1, count + 1);
arr[node[0]][node[1]] = 0;
visitedA[node[0]][i]= false;
visitedB[node[1]][i] = false;
visitedC[(node[0] / 3) * 3 + node[1] / 3][i] = false;
}
}
}
}
'코딩테스트 > [백준] 코딩테스트 연습' 카테고리의 다른 글
미네랄 - 2933번 (0) | 2022.04.06 |
---|---|
게리맨더링 - 17471번 (0) | 2022.04.06 |
사다리 조작 - 15684번 (0) | 2022.04.05 |
톱니바퀴 - 14891번 (0) | 2022.04.04 |
인구 이동 - 16234번 (0) | 2022.04.01 |