1+ import java .io .BufferedReader ;
2+ import java .io .IOException ;
3+ import java .io .InputStreamReader ;
4+
5+ import java .util .StringTokenizer ;
6+
7+ public class boj_2580_스도쿠 {
8+
9+ static int [][] arr = new int [9 ][9 ];
10+
11+ public static void main (String [] args ) throws IOException {
12+
13+ BufferedReader br = new BufferedReader (new InputStreamReader (System .in ));
14+
15+ for (int i = 0 ; i < 9 ; i ++) {
16+ StringTokenizer str = new StringTokenizer (br .readLine ());
17+ for (int j = 0 ; str .hasMoreTokens ();j ++) {
18+ arr [i ][j ]= Integer .parseInt (str .nextToken ());
19+ }
20+ }
21+
22+ dfs (0 ,0 );
23+ }
24+ static void dfs (int row , int col ) {
25+
26+ if (col == 9 ) {
27+ dfs (row +1 ,0 );
28+ return ;
29+ }
30+
31+ if (row == 9 ) {
32+ StringBuilder sb = new StringBuilder ();
33+ for (int i = 0 ; i < 9 ; i ++) {
34+ for (int j = 0 ; j < 9 ; j ++) {
35+ sb .append (arr [i ][j ]).append (' ' );
36+ }
37+ sb .append ('\n' );
38+ }
39+ System .out .println (sb );
40+
41+ System .exit (0 );
42+ }
43+
44+ if (arr [row ][col ]==0 ) {
45+ for (int i = 1 ; i <= 9 ; i ++) {
46+ if (check (row , col , i )) {
47+ arr [row ][col ] = i ;
48+ dfs (row , col +1 );
49+ }
50+ }
51+ arr [row ][col ]=0 ;
52+ return ;
53+ }
54+
55+ dfs (row , col +1 );
56+ }
57+
58+ static boolean check (int row , int col , int value ) {
59+
60+ //같은열에 무슨 숫자가 비었는지
61+ for (int i = 0 ; i < 9 ; i ++) {
62+ if (arr [row ][i ] == value ) {
63+ return false ;
64+ }
65+ }
66+
67+ //같은행에 무슨 숫자가 비었는지
68+ for (int i = 0 ; i < 9 ; i ++) {
69+ if (arr [i ][col ] == value ) {
70+ return false ;
71+ }
72+ }
73+
74+ //같은 네모에 뭐가 있는지
75+ int ind_row = (row /3 )*3 ;
76+ int ind_col = (col /3 )*3 ;
77+
78+ for (int i = ind_row ; i < ind_row +3 ; i ++) {
79+ for (int j = ind_col ; j < ind_col +3 ; j ++) {
80+ if (arr [i ][j ] == value )
81+ return false ;
82+ }
83+ }
84+
85+ return true ;
86+ }
87+
88+
89+ }
0 commit comments