728x90
반응형
우선 dfs 와 bfs 를 조금더 공부하고 다시 풀어봐야겠다!
dfs 로 풀면 되는데 어디서 재귀조건으로 나가는지 지나가는지 확인하기.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static int N, M =0;
public static StringBuilder sb = new StringBuilder();
public static boolean check[];
public static int arr[][] = new int[9][9];
public static void sudoku(int row, int col ) {
// 스도쿠 -> 재귀, 브루트포스랑 비슷한 문제 ->
if(arr[row])
// 0 이라는 find 조건 **
if(arr[row][col] ==0) {
// 1 에서 9까지 있는지 확인~
for(int i =0; i<=9; i++) {
if(poosibility(row, col, i)) {
arr[row][col] = i;
System.out.println(arr[row][col]);
System.out.println(i);
sudoku(row, col+1);
}
}
}
// 1. row 를 먼저 검색하자
sudoku(row+1, col);
}
public static boolean poosibility (int row, int col, int val) {
// 행별 search
// 아주 그냥 뒤적뒤적 다 찾아버리겠어~~
for(int i =0; i<9; i++) {
if(arr[col][i] == val)
return false;
}
// column 별 search
for(int i =0; i<9; i++) {
if(arr[col][i] == val)
return false;
}
// 여기도 다 참고 -> 여기는 int 가 i 랑 j 가 아니다
int set_row = (row/3)*3;
int set_column = (col/3)*3;
for(int i=set_row;i<set_row+3; i++) {
for(int j=set_column;j<set_column+3;j++)
if(arr[i][j] == val)
return false;
}
return true;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//N과 M 배우기.
StringTokenizer st;
// 입력 과정
for(int i =0; i<9; i++) {
st = new StringTokenizer(br.readLine());
for(int j=0; j<9; j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
//dfs 함수 수행
sudoku(0, 0);
// System.out.println(sb);
}
}
728x90
반응형
'이유's STUDY > 알고리즘 문제풀이' 카테고리의 다른 글
[ leetcode ] dfs 문제 - number of islands (0) | 2021.11.02 |
---|---|
[ 자료구조 ] LinkedList (0) | 2021.08.26 |
[ 백준 ] 1560번 - N과 m (2) --- java 이용 (0) | 2021.08.06 |
[ 백준 ] 11729 - 하노이 탑 이동 순서 (0) | 2021.08.03 |
[ 백준 ] 별찍기 -10 -- Java 이용 (0) | 2021.07.30 |