본문 바로가기

알고리즘 문제풀이

백준2239 - 스도쿠 java

728x90
package a0406;

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

/*
 2차원배열에서 0인곳 dfs돌면서 조건 만족하는 수 완탐?
 
 조건 1) 가로 2) 세로 3) 범위사각형 
 
 */
public class 백준2239_스도쿠 {

	static int[][] arr = new int[9][9];
	static ArrayList<int[]> zerolist = new ArrayList<>();
	static int allflag = 0;
	
	static void dfs(int cnt) {
		//System.out.println(cnt);
		//print();
		if(allflag==1)return;
		
		if(cnt==zerolist.size()) {
			for(int i=0; i<9; i++) {
				for(int j=0; j<9; j++) {
					System.out.print(arr[i][j]);
				}
				System.out.println();
			}
			allflag = 1;
			return;
		}
		
		int now[] = zerolist.get(cnt);
		int nowi = now[0];	int nowj = now[1];
		
		for(int i=1; i<=9; i++) {
			if(garosafe(nowi, nowj, i) && serosafe(nowi, nowj, i) && boxsafe(nowi, nowj, i)) {
				arr[nowi][nowj] = i;
				dfs(cnt+1);
				arr[nowi][nowj] = 0;
			}
		}	
	}
	
	static void print() {
		for(int i=0; i<9; i++) {
			for(int j=0; j<9; j++) {
				System.out.print(arr[i][j]+" ");
			}
			System.out.println();
		}
		System.out.println();
	}
	
	static boolean garosafe(int i, int j, int num) {
		
		for(int k=0; k<9; k++) {
			if(arr[i][k]==num)return false;
		}
		return true;
	}
	
	static boolean serosafe(int i, int j, int num) {
		for(int k=0; k<9; k++) {
			if(arr[k][j]==num)return false;
		}
		return true;
	}
	
	static boolean boxsafe(int i, int j, int num) {
		
		int serostart = (i/3)*3;
		int garostart = (j/3)*3;
		
		for(int k=serostart; k<serostart+3; k++) {
			for(int l=garostart; l<garostart+3; l++) {
				if(num==arr[k][l])return false;
			}
		}
		return true;
	}
	
	public static void main(String[] args) throws Exception{

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		for(int i=0; i<9; i++) {
			String st = br.readLine();
			for(int j=0; j<9; j++) {
				arr[i][j] = st.charAt(j)-'0';
				if(arr[i][j]==0)zerolist.add(new int[] {i, j});
			}
		}
		dfs(0);
		
	}
}

'알고리즘 문제풀이' 카테고리의 다른 글

SWEA - 키 순서 java  (0) 2022.04.07
SWEA - 오! 나의 여신님 JAVA  (0) 2022.04.07
SWEA - 벽돌깨기 java  (0) 2022.04.05
백준15961 - 회전초밥 java  (0) 2022.04.05
SWEA - 파핑파핑 지뢰찾기 JAVA  (0) 2022.04.05