[백준 2239] 스도쿠

Junyoung Park·2022년 7월 7일
0

코딩테스트

목록 보기
498/631
post-thumbnail

1. 문제 설명

스도쿠

2. 문제 분석

지난 번 스도쿠 문제와 동일. 유효 숫자를 정렬해서 주었기 때문에 먼저 출력되는 스도쿠는 가장 빠른 순서의 스도쿠다.

3. 나의 풀이

import sys

nodes = [list(map(int, sys.stdin.readline().rstrip())) for _ in range(9)]
zeros = []
for i in range(9):
    for j in range(9):
        if nodes[i][j] == 0: zeros.append((i, j))

zero_cnt = len(zeros)

def number_check(row, col):
    numbers = set()

    for i in range(9):
        numbers.add(nodes[i][col])
        numbers.add(nodes[row][i])

    box_row, box_col = row // 3, col // 3

    for i in range(box_row * 3, box_row * 3 + 3):
        for j in range(box_col * 3, box_col * 3 + 3):
            numbers.add(nodes[i][j])

    numbers = set(range(1, 10)).difference(numbers)
    numbers = list(numbers)
    numbers.sort()

    return numbers

def DFS(cnt):

    if cnt == zero_cnt:
        for row in nodes:
            print(*row, sep='')
        exit(0)

    row, col = zeros[cnt]
    numbers = number_check(row, col)
    for num in numbers:
        nodes[row][col] = num
        DFS(cnt + 1)
        nodes[row][col] = 0

DFS(0)
profile
JUST DO IT

0개의 댓글