import sys
r = sys.stdin.readline
# 가로 체크
def horizontal(x, val):
if val in sudoku[x]:
return False
return True
# 세로 체크
def vertical(y, val):
for i in range(9):
if val == sudoku[i][y]:
return False
return True
# 3x3 체크
def ThreeXThree(x, y, val):
nx = x//3 * 3
ny = y//3 * 3
for i in range(3):
for j in range(3):
if val == sudoku[nx+i][ny+j]:
return False
return True
def DFS(index):
if index == len(zeros):
for row in sudoku:
for n in row:
print(n, end=" ")
print()
sys.exit(0)
else:
for i in range(1, 10):
nx = zeros[index][0]
ny = zeros[index][1]
# 세로, 가로, 3x3에 내가 대체하려고하는 숫자가 존재하는지 확인
if horizontal(nx, i) and vertical(ny, i) and ThreeXThree(nx, ny, i):
sudoku[nx][ny] = i
DFS(index+1)
sudoku[nx][ny] = 0
sudoku = [list(map(int, r().split())) for _ in range(9)]
zeros = [(i, j) for i in range(9) for j in range(9) if sudoku[i][j] == 0]
DFS(0)
'문제풀이 > 백준(Boj) 문제풀이' 카테고리의 다른 글
[백준][동적 계획법1] 1003. 피보나치 함수 (파이썬/Python) (0) | 2021.09.09 |
---|---|
[백준][재귀] 2447. 별 찍기 - 10 (파이썬/Python) (0) | 2021.09.09 |
[백준][백트래킹] 15649. N과 M (1) (파이썬/Python) (0) | 2021.09.05 |
[백준(Boj)][14단계] 15652.N과 M (4) (파이썬/Python) (0) | 2021.09.05 |
[백준(Boj)][14단계] 15651.N과 M (3) (파이썬/Python) (0) | 2021.09.05 |