백준
[백준] 2580 스도쿠
거북이같은곰
2021. 11. 6. 23:48
https://st-lab.tistory.com/119
[백준] 2580번 : 스도쿠 - JAVA [자바]
www.acmicpc.net/problem/2580 2580번: 스도쿠 스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각
st-lab.tistory.com
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static int xy[][];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
xy = new int[9][9];
for(int i = 0; i < 9; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for(int j = 0; j < 9; j++) {
xy[i][j] = Integer.parseInt(st.nextToken());
}
}
check(0,0);
}
static void check(int row, int column) {
if(column == 9) {
check(row + 1, 0);
return;
}
if(row == 9) {
StringBuilder sb = new StringBuilder();
for(int i = 0; i < 9; i++) {
for(int j = 0; j < 9; j++) {
if(j == 8) {
sb.append(xy[i][j]).append("\n");
}
else {
sb.append(xy[i][j]+" ");
}
}
}
System.out.println(sb);
System.exit(0);
}
if(xy[row][column] == 0) {
for(int i = 1; i <= 9; i++) {
if(check_square(i, row, column)) {
xy[row][column] = i;
check(row, column + 1);
}
}
xy[row][column] = 0;
}
else
check(row, column + 1);
}
static boolean check_square(int n, int x, int y) {
for(int i = 0; i < 9; i++) {
if(n == xy[x][i])
return false;
if(n == xy[i][y])
return false;
}
int start_x = (x / 3) * 3;
int start_y = (y /3) * 3;
for(int i = start_x; i < start_x+3; i++) {
for(int j = start_y; j < start_y+3; j++) {
if(xy[i][j] == n) {
return false;
}
}
}
return true;
}
}