# 2580
스도쿠
🥇 G4
import sys
sudoku = []
blanks = []
for i in range(9):
sudoku_line = list(map(int, sys.stdin.readline().split()))
for j in range(9):
if sudoku_line[j] == 0:
blanks.append((i, j))
sudoku.append(sudoku_line)
def num_ok(x, y, i):
if i in sudoku[x]:
return False
if any(sudoku[row][y] == i for row in range(9)):
return False
x0, y0 = (x // 3) * 3, (y // 3) * 3
for j in range(x0, x0 + 3):
for k in range(y0, y0 + 3):
if sudoku[j][k] == i:
return False
return True
def DFS(index):
if index == len(blanks):
return True
x, y = blanks[index]
for i in range(1, 10):
if num_ok(x, y, i):
sudoku[x][y] = i
if DFS(index + 1):
return True
sudoku[x][y] = 0
return False
DFS(0)
for sudoku_line in sudoku:
print(*sudoku_line)
백트래킹 할 때 원래 값 수복하고 다시 재귀 들어가는 부분을 논리적으로 잘못 생각햇다..
뇌 주름 추가 want
any() 배웠다
함수변수명 좀 멋지고 깔끔하게 짓고 싶음
백트래킹 단계 완료!
'📊 Algorithm > BOJ' 카테고리의 다른 글
⚠︎ 백준 - 1904 01타일 (0) | 2024.08.06 |
---|---|
⚠︎ 백준 - 2559 수열 (0) | 2024.07.29 |
⚠︎ 백준 - 14888 인형들 (0) | 2024.06.28 |
⚠︎ 백준 - 14888 연산자 끼워넣기 (0) | 2024.06.20 |
⚠︎ 백준 - 14889 스타트와 링크 (0) | 2024.06.18 |