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 |