백준 2580 - 스도쿠 (파이썬)
Updated:
Answer
import sys
input = sys.stdin.readline
a = [list(map(int, input().split())) for _ in range(9)]
z = [(i, j) for i in range(9) for j in range(9) if a[i][j] == 0]
def check(x, y):
n = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for i in range(9):
if a[x][i] in n:
n.remove(a[x][i])
if a[i][y] in n:
n.remove(a[i][y])
x = x - (x % 3)
y = y - (y % 3)
for i in range(x, x + 3):
for j in range(y, y + 3):
if a[i][j] in n:
n.remove(a[i][j])
return n
def dfs(x):
if len(z) == x:
for i in a:
print(*i)
sys.exit()
else:
for i in check(z[x][0], z[x][1]):
a[z[x][0]][z[x][1]] = i
dfs(x + 1)
a[z[x][0]][z[x][1]] = 0
dfs(0)