
url : https://www.acmicpc.net/problem/2580


import sys
sys.stdin = open("test.txt")
# x 세로줄의 n이 있는지 확인
def check_Row(x, n):
for i in range(9):
if n == graph[x][i]:
return False
return True
# y 가로줄의 n이 있는지 확인
def check_Col(y, n):
for i in range(9):
if n == graph[i][y]:
return False
return True
# 3 * 3 칸에 n이 있는지 확인
def check_Rect(x, y, n):
nx = x // 3 * 3
ny = y // 3 * 3
for i in range(3):
for j in range(3):
if n == graph[nx+i][ny+j]:
return False
return True
# dfs + 백트래킹
def solution(n):
# 스도쿠를 모두 채웠다면
if n == len(blank):
for _ in range(9):
# *arg - 리스트, 튜플, 컬렉션 등을 언패킹
print(*graph[_])
exit(0)
for i in range(1, 10):
x = blank[n][0] # 빈칸의 x좌표
y = blank[n][1] # 빈칸의 y좌표
if check_Row(x, i) and check_Col(y, i) and check_Rect(x, y, i):
graph[x][y] = i
solution(n + 1)
graph[x][y] = 0
graph = [list(map(int, input().split())) for _ in range(9)]
blank = [(i, j) for i in range(9) for j in range(9) if graph[i][j] == 0]
solution(0)