본문 바로가기
📊 Algorithm/BOJ

⚠︎ 백준 - 2580 스도쿠

by 정람지 2024. 7. 29.

내가 만든 그릭요거트


# 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() 배웠다

함수변수명 좀 멋지고 깔끔하게 짓고 싶음

 

백트래킹 단계 완료!


SQLD 준비중

 

'📊 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