백준 2239 - 스도쿠

Updated:

Java

2239 번 - 스도쿠

문제

하다 만 스도쿠 퍼즐이 주어졌을 때, 마저 끝내는 프로그램을 작성하시오.

접근 방법

코드

import java.util.*;
import java.io.*;

public class Main {
	static int n, result;
	static int[][] map;
	static boolean[][] row, col, box;
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	String str;
    	
    	map = new int[9][9];
    	row = new boolean[9][10];
    	col = new boolean[9][10];
    	box = new boolean[9][10];
    	
    	for(int i = 0; i < 9; i++) {
    		str = br.readLine();
    		for(int j = 0; j < 9; j++) {
    			map[i][j] = str.charAt(j) - '0';
    			if(map[i][j] != 0) {
    				row[i][map[i][j]] = true;
    				col[j][map[i][j]] = true;
    				box[findSquareIdx(i,j)][map[i][j]] = true;
    			}
    		}
    	}
    	DFS(0);
    	br.close();
	}
	
	static void DFS(int cnt) {
		if(cnt == 81) {
			for(int i = 0; i < 9; i++) {
	    		for(int j = 0; j < 9; j++) {
	    			System.out.print(map[i][j]);
	    		}
	    		System.out.println();
	    	}
			System.exit(0);
			return;
		}
		int y = cnt / 9;
		int x = cnt % 9;
		if(map[y][x] != 0) {
			DFS(cnt + 1);
		}
		else {
			for(int i = 1; i <= 9; i++) {
				if(!row[y][i] && !col[x][i] && !box[findSquareIdx(y,x)][i]) {
					map[y][x] = i;
					row[y][i] = true;
					col[x][i] = true;
					box[findSquareIdx(y,x)][i] = true;
					DFS(cnt + 1);
					map[y][x] = 0;
					row[y][i] = false;
					col[x][i] = false;
					box[findSquareIdx(y,x)][i] = false;
				}
			}
		}
	}
	
	static int findSquareIdx(int y, int x) {
		return (y / 3) * 3 + x / 3;
	}
	
	static int stoi(String str) {
    	return Integer.parseInt(str);
    }
}

총평

후기

개선할 점

없습니다.