1
+ package backjoon ;
2
+ // https://www.acmicpc.net/problem/2580
3
+
4
+ import java .io .BufferedReader ;
5
+ import java .io .IOException ;
6
+ import java .io .InputStreamReader ;
7
+ import java .util .StringTokenizer ;
8
+
9
+ public class _2580 {
10
+
11
+ public static int [][] arr = new int [9 ][9 ]; //์ค๋์ฟ ํ
12
+
13
+ public static void main (String [] args ) throws IOException {
14
+ BufferedReader br = new BufferedReader (new InputStreamReader (System .in ));
15
+ //sol memory 19172 runtime 388
16
+ for (int i = 0 ; i < 9 ; i ++) {
17
+ StringTokenizer st = new StringTokenizer (br .readLine (), " " );
18
+ for (int j = 0 ; j < 9 ; j ++) {
19
+ arr [i ][j ] = Integer .parseInt (st .nextToken ());
20
+ }
21
+ }
22
+
23
+ sudoku (0 , 0 );
24
+ }
25
+
26
+ public static void sudoku (int row , int col ) {
27
+ // ํด๋น ํ์ด ๋ค ์ฑ์์ง ๊ฒฝ์ฐ ๋ค์ํ์ผ๋ก ๊ฐ๊ธฐ
28
+ if (col == 9 ) {
29
+ sudoku (row + 1 , 0 );
30
+ return ;
31
+ }
32
+
33
+ // ํ๊ณผ ์ด์ด ๋ค ์ฑ์์ง ๊ฒฝ์ฐ ์ค๋์ฟ ํ ์ถ๋ ฅํ๊ธฐ
34
+ if (row == 9 ) {
35
+ StringBuilder sb = new StringBuilder ();
36
+ for (int i = 0 ; i < 9 ; i ++) {
37
+ for (int j = 0 ; j < 9 ; j ++) {
38
+ sb .append (arr [i ][j ]).append (" " );
39
+ }
40
+ sb .append ("\n " );
41
+ }
42
+ System .out .println (sb );
43
+ // ์ค๋์ฟ ํ์ ์ฑ์ฐ๋ ๋ฐฉ๋ฒ์ด ์ฌ๋ฟ์ธ ๊ฒฝ์ฐ๋ ๊ทธ ์ค ํ๋๋ง์ ์ถ๋ ฅํ๊ธฐ ์ํด์ ์์คํ
์ข
๋ฃ
44
+ System .exit (0 );
45
+ }
46
+
47
+ // ๋ง์ฝ ํด๋น ์์น๊ฐ 0 ์ด๋ผ๋ฉด 1๋ถํฐ 9๊น์ง ์ค ๊ฐ๋ฅํ ์ ํ์
48
+ if (arr [row ][col ] == 0 ) {
49
+ for (int i = 1 ; i <= 9 ; i ++) {
50
+ // i ๊ฐ์ด ์ค๋ณต๋์ง ์๋์ง ๊ฒ์ฌ
51
+ if (possibility (row , col , i )) {
52
+ arr [row ][col ] = i ;
53
+ sudoku (row , col + 1 );
54
+ }
55
+ }
56
+ arr [row ][col ] = 0 ;
57
+ return ;
58
+ }
59
+
60
+ sudoku (row , col + 1 );
61
+
62
+ }
63
+
64
+ public static boolean possibility (int row , int col , int value ) {
65
+ // ๊ฐ์ ํ ๊ฒ์ฌ
66
+ for (int i = 0 ; i < 9 ; i ++) {
67
+ if (arr [row ][i ] == value ) {
68
+ return false ;
69
+ }
70
+ }
71
+
72
+ // ๊ฐ์ ์ด ๊ฒ์ฌ
73
+ for (int i = 0 ; i < 9 ; i ++) {
74
+ if (arr [i ][col ] == value ) {
75
+ return false ;
76
+ }
77
+ }
78
+
79
+ // 3*3 ์นธ ๊ฒ์ฌ
80
+ int set_row = (row / 3 ) * 3 ; // value๊ฐ ์ํ 3x3์ ํ์ ์ฒซ ์์น
81
+ int set_col = (col / 3 ) * 3 ; // value๊ฐ ์ํ 3x3์ ์ด์ ์ฒซ ์์น
82
+
83
+ for (int i = set_row ; i < set_row + 3 ; i ++) {
84
+ for (int j = set_col ; j < set_col + 3 ; j ++) {
85
+ if (arr [i ][j ] == value ) {
86
+ return false ;
87
+ }
88
+ }
89
+ }
90
+ return true ; // ์ค๋ณต๋๋ ๊ฒ์ด ์์ ๊ฒฝ์ฐ true ๋ฐํ
91
+ }
92
+ }
93
+ /*
94
+ INPUT
95
+ 0 3 5 4 6 9 2 7 8
96
+ 7 8 2 1 0 5 6 0 9
97
+ 0 6 0 2 7 8 1 3 5
98
+ 3 2 1 0 4 6 8 9 7
99
+ 8 0 4 9 1 3 5 0 6
100
+ 5 9 6 8 2 0 4 1 3
101
+ 9 1 7 6 5 2 0 8 0
102
+ 6 0 3 7 0 1 9 5 2
103
+ 2 5 8 3 9 4 7 6 0
104
+
105
+ OUTPUT
106
+ 1 3 5 4 6 9 2 7 8
107
+ 7 8 2 1 3 5 6 4 9
108
+ 4 6 9 2 7 8 1 3 5
109
+ 3 2 1 5 4 6 8 9 7
110
+ 8 7 4 9 1 3 5 2 6
111
+ 5 9 6 8 2 7 4 1 3
112
+ 9 1 7 6 5 2 3 8 4
113
+ 6 4 3 7 8 1 9 5 2
114
+ 2 5 8 3 9 4 7 6 1
115
+ */
0 commit comments