728x90
배경
https://www.acmicpc.net/problem/2580
코드
def row(a, n):
for i in range(9):
if a == sudoku[n][i]:
return False
return True
def colum(a, n):
for i in range(9):
if a == sudoku[i][n]:
return False
return True
def square(x,y,a):
for i in range(3):
for j in range(3):
if a == sudoku[y//3*3+i][x//3*3+j]:
return False
return True
def dfs(n):
if n==len(blank):
for i in sudoku:
print(*i)
exit()
for i in range(1,10):
y = blank[n][0]
x = blank[n][1]
if row(i, y) and colum(i, x) and square(x,y,i):
sudoku[y][x]=i
dfs(n+1)
sudoku[y][x]=0
import sys
sudoku = [list(map(int,sys.stdin.readline().split())) for _ in range(9)]
blank = []
for i in range(9):
for j in range(9):
if sudoku[i][j] == 0:
blank.append([i,j])
dfs(0)
설명
y가 먼저 나오는 이유는 2중 list의 경우 첫 번째 list가 보통 y값을 가르키기 때문입니다
리스트를 받고 스도쿠가 0인 값의 좌표를 받습니다.
해당 좌표의 가로 세로 대각선을 돌리면서 1~10까지의 숫자 중 가능한 숫자를 선택해서 넣습니다
배운 점
'자료구조&알고리즘' 카테고리의 다른 글
백준 | [파이썬 Python] 9251 LCS (0) | 2024.05.07 |
---|---|
백준 | [파이썬 Python] 2156 포도주 시식 (0) | 2024.04.29 |
[Python] 백준 - 스타드와 링크 14889 (0) | 2024.04.02 |
[Python] N-Queen 9663 (0) | 2024.04.01 |