반응형

Prob


Approach

PyPy를 사용하여 제출한다.

미입력된 부분만 뽑아서 후보 숫자를 구해 백트래킹한다.


Code

import sys
m_board = [list(map(int, sys.stdin.readline().rstrip().split())) for _ in range(9)]
prob = [(i, j) for i in range(9) for j in range(9) if m_board[i][j] == 0]

def candi_num(i, j):
    num = [k for k in range(1, 10)]
    
    for m in range(9):
        if m_board[i][m] in num:
            num.remove(m_board[i][m])
        if m_board[m][j] in num:
            num.remove(m_board[m][j])
    i = i // 3
    j = j // 3

    for p in range(i * 3, (i + 1) * 3):
        for q in range(j * 3, (j + 1) * 3):
            if m_board[p][q] in num:
                num.remove(m_board[p][q])
    return num

flag = False
def dfs(x):
    global flag
    
    if flag:
        return

    if x == len(prob):
        for k in range(len(m_board)):
            sys.stdout.write(' '.join(map(str, m_board[k])) + '\n')
        flag = True
        return
    else:
        (i, j) = prob[x]
        can_num = candi_num(i, j)
        for num in can_num:
            m_board[i][j] = num
            dfs(x + 1)
            m_board[i][j] = 0
dfs(0)

 

출처

https://www.acmicpc.net/problem/2580

반응형

'프로젝트 > Baekjoon' 카테고리의 다른 글

BAEKJOON PYTHON 14888 연산자 끼워넣기  (0) 2021.09.02
BAEKJOON PYTHON 9663 N-Queen  (0) 2021.09.02
BAEKJOON PYTHON 15652 N과 M (4)  (0) 2021.09.02
BAEKJOON PYTHON 15651 N과 M (3)  (0) 2021.09.02
BAEKJOON PYTHON 15650 N과 M (2)  (0) 2021.08.31
블로그 이미지

Refrin

일상생활 끄적 IT 프로젝트 끄적