본문 바로가기

boj

백준 2580 스도쿠

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

 

2580번: 스도쿠

스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루

www.acmicpc.net

스도쿠를 받으면서, 공백의 위치만 따로 기억한다.

이후, 첫번째 공백부터 1~9의 숫자로 채우며, 가로,세로,3*3사각형을 검사한다.

이후 되는경우만 밀고나간다.

 

##코드##

import sys
input=sys.stdin.readline

def check(a,b,value):
    
    for i in range(9):
        #가로
        if arr[a][i]==value:
            return False
        #세로
        if arr[i][b]==value:
            return False
    #사각형
    start_a=a//3*3
    start_b=b//3*3
    for i in range(start_a,start_a+3):
        for j in range(start_b,start_b+3):
            if arr[i][j]==value:
                return False


    return True

            




def dfs(cnt=0):
    if cnt==len(blank):
        for ar in arr:
            print(* ar)
        exit()

    for i in range(1,10):
        a,b=blank[cnt] #세로,가로
  
        if check(a,b,i):
            arr[a][b]=i
            dfs(cnt+1)
            arr[a][b]=0
    return

arr=[] #스도쿠
blank=[]
for i in range(9):
    tmp=[*map(int,input().strip().split())]
    arr.append(tmp)
    for j in range(9):
        if tmp[j]==0:
            blank.append((i,j))
dfs()

진짜 가면갈수록자괴감느낀다.

이걸 도저히 이해못하겠는 복잡한 코드를 짜서 200ms대에 푸는 사람이 있다.

봐도 이해를 못하겠다.

'boj' 카테고리의 다른 글

백준 11725 트리의 부모 찾기  (0) 2022.05.11
백준 2250 트리의 높이와 너비  (0) 2022.05.10
백준4179불!  (0) 2022.05.07
백준 2023 신기한 소수  (0) 2022.05.05
백준 1991 트리 순회  (0) 2022.05.04