백준 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)

Categories:

Updated: