[알고리즘] 백준 2580번 스도쿠
코드
import sys
Sudoku = [[0 for j in range(9)] for i in range(9)]
Blank = []
for i in range(9):
Sudoku[i] = list(map(int,sys.stdin.readline().split()))
for i in range(9):
for j in range(9):
if Sudoku[i][j] == 0:
Blank.append((i,j))
def Valid(row,col,num):
temp_row = int(row/3)
temp_col = int(col/3)
for i in range(9):
if num == Sudoku[row][i] or num == Sudoku[i][col]:
return 0
for i in range(3):
for j in range(3):
if num == Sudoku[(3*temp_row)+i][(3*temp_col)+j]:
return 0
return 1
def dfs(idx):
if idx == len(Blank):
for i in range(9):
for j in range(9):
print(Sudoku[i][j], end=' ')
print()
exit(0)
for i in range(9):
if Valid(Blank[idx][0],Blank[idx][1],i+1):
Sudoku[Blank[idx][0]][Blank[idx][1]] = i + 1
dfs(idx+1)
Sudoku[Blank[idx][0]][Blank[idx][1]] = 0
dfs(0)
스도쿠의 0 위치를 저장해두고 저장된 배열을 이용하여 빈칸을 채워나간다.
틀린 경우가 있었는데, 정답 판을 출력한 후 exit(0)을 사용하지 않고 return을 사용하면 모든 정답 스도쿠 판을 출력하게 되어 틀리게 된다.
댓글남기기