행, 열, 3X3 지역에 동일한 숫자가 있는 지 체크하는 메소드를 만들고 메소드를 통과하면 스도쿠 0값에 값을 채워나가는 식으로 풀이 하였다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import java.util.Scanner;
public class Sudoku {
static int[][] answerArr = new int[9][9];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = 9;
int m = 9;
for(int i=0; i<n; i++) {
int[] serveArr = new int[m];
for(int j=0; j<m; j++) {
serveArr[j] = sc.nextInt();
}
answerArr[i] = serveArr;
}
dfs(0,0);
}
static void dfs(int index, int jindex) {
if(jindex == 9) {//열이 9일시 행 +1
dfs(index+1, 0);
return;
}
if(index == 9) {//행 열이 끝까지 도달하면 력
for(int i=0; i<9; i++) {
for(int j=0; j<9; j++) {
System.out.print(answerArr[i][j]+" ");
}
System.out.println();
}
return;
}
if(answerArr[index][jindex]==0) {
for(int i=1; i<=9; i++) {
if(area(index, jindex, i) && vertical(jindex, i) && horizon(index, i)) {//같은 숫자가 있을지 체크
answerArr[index][jindex]=i;//통과시 채워줌
dfs(index, jindex+1);
}
}
answerArr[index][jindex] = 0;
return;
}
dfs(index, jindex + 1);
}
static boolean area(int index, int jindex, int num) {//3x3 행열에 같은 숫자 있는지 체크
int a = (index/3)*3;
int b = (jindex/3)*3;
for(int i=a; i<a+3; i++) {
for(int j=b; j<b+3; j++) {
if(answerArr[i][j]==num) {
return false;
}
}
}
return true;
}
static boolean vertical(int index, int num) {//열에 같은 숫자가 있을지 체크
for(int i=0; i<answerArr.length; i++) {
if(answerArr[i][index]==num) {
return false;
}
}
return true;
}
static boolean horizon(int index, int num) {//행에 같은 숫자가 있을지 체크
for(int i=0; i<answerArr[index].length; i++) {
if(answerArr[index][i]==num) {
return false;
}
}
return true;
}
}