알고리즘/백준
[백준] 2580번 스도쿠 (파이썬)
알감자
2021. 12. 29. 21:32
2580번: 스도쿠
스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루
www.acmicpc.net
코드
import sys
li = list(list(map(int,input().split())) for i in range(9))
zeros = list([i,j] for i in range(9) for j in range(9) if li[i][j] == 0)
def sdoku(index):
if index == len(zeros):
for row in li:
print(*row)
sys.exit(0)
else:
x = zeros[index][0]
y = zeros[index][1]
dx = (x//3)*3
dy = (y//3)*3
num_list = [False] + [True for i in range(9)]
for j in range(9):
if (li[x][j]):
num_list[li[x][j]] = False
if (li[j][y]):
num_list[li[j][y]] = False
for i in range(dx,dx+3):
for j in range(dy,dy+3):
check_num = li[i][j]
if check_num:
num_list[check_num] = False
candidate_li = [i for i,k in enumerate(num_list) if k]
for num in candidate_li:
li[x][y] = num
sdoku(index+1)
li[x][y] = 0
sdoku(0)