백준

[백준] 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;
	}
}