# 스도쿠
import sys
input = sys.stdin.readline
N = 9
arr = []
zero = []
for i in range(N):
arr.append(list(map(int, input().split())))
for j in range(N):
if arr[i][j] == 0:
zero.append((i, j))
def check(x, y, num):
for j in range(N):
if arr[x][j] == num:
return False
for i in range(N):
if arr[i][y] == num:
return False
temp_x = x // 3 * 3
temp_y = y // 3 * 3
for i in range(temp_x, temp_x+3):
for j in range(temp_y, temp_y+3):
if arr[i][j] == num:
return False
return True
def push_num(count):
global isDone
if count == len(zero):
isDone = True
return
x = zero[count][0]
y = zero[count][1]
for n in range(1, 10):
if check(x, y, n):
arr[x][y] = n
push_num(count+1)
if isDone:
return
arr[x][y] = 0
isDone = False
push_num(0)
for i in range(N):
print(*arr[i])
백트랙킹
1. 입력 받을 때 0인 좌표를 zero리스트에 따로 append한다.
2. 1~9까지 가로, 세로, 구역 체크가 된 숫자를 zero리스트 좌표의 arr에 넣는다
3. zero리스트의 좌표에 전부 값을 넣었으면 retrun
4. 출력
'Algorithm > BOJ' 카테고리의 다른 글
[백준] 2252번 - 줄 세우기 (파이썬) (0) | 2022.01.24 |
---|---|
[백준] 1717번 - 집합의 표현 (파이썬) (0) | 2022.01.24 |
[백준] 16236번 - 아기 상어 (파이썬) (0) | 2022.01.23 |
[백준] 2206번 - 벽 부수고 이동하기 (파이썬) (0) | 2022.01.23 |
[백준] 1987번 - 알파벳 (파이썬) (0) | 2022.01.23 |