https://www.acmicpc.net/problem/2580
2580번: 스도쿠
스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루
www.acmicpc.net
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StringBuilder sb = new StringBuilder();
static StringTokenizer st;
static int[][] arr;
static boolean flag;
public static void main(String[] args) throws Exception {
arr = new int[9][9];
for (int i = 0; i < 9; i++) {
st = new StringTokenizer(br.readLine(), " ");
for (int j = 0; j < 9; j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
}
} // end of input
fill(0);
System.out.print(sb);
}
static void fill(int index) {
int i = index / 9;
int j = index % 9;
while (i < 9) {
if (arr[i][j] == 0) {
for (int num = 1; num <= 9; num++) {
if (check(i, j, num)) {
arr[i][j] = num;
fill(i * 9 + j + 1);
if (flag) return;
arr[i][j] = 0;
}
}
if (arr[i][j] == 0) return;
}
if (8 < ++j) {
j = 0;
i++;
}
}
for (int r = 0; r < 9; r++) {
for (int c = 0; c < 9; c++) {
sb.append(arr[r][c]).append(" ");
}
sb.append("\n");
}
flag = true;
}
static boolean check(int row, int col, int num) {
for (int i = 0; i < 9; i++) {
if (arr[i][col] == num) return false;
}
for (int j = 0; j < 9; j++) {
if (arr[row][j] == num) return false;
}
for (int i = (row / 3) * 3; i < (row / 3 + 1) * 3; i++) {
for (int j = (col / 3) * 3; j < (col / 3 + 1) * 3; j++) {
if (arr[i][j] == num) return false;
}
}
return true;
}
}
'OJ' 카테고리의 다른 글
[BOJ] 2225 합분해 (JAVA) (2) | 2023.03.20 |
---|---|
[BOJ] 2293 동전 1 (JAVA) (0) | 2023.03.19 |
[BOJ] 27519 소수의 합 (JAVA) (0) | 2023.03.17 |
[BOJ] 27514 1차원 2048 (JAVA) (0) | 2023.03.16 |
[BOJ] 27512 스네이크 (JAVA) (0) | 2023.03.15 |