728x90
https://www.acmicpc.net/problem/2580
2580번: 스도쿠
스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루
www.acmicpc.net
해당 문제는 완전탐색 문제로 비어있는 테이블을 확인하고 비어있는 테이블에서 넣을 수 있는 수를 구한뒤 넣어본다. 그리고 넣은 곳을 반드시 초기화 해 주어야 다른 깊이우선 탐색에서 다시 넣어 볼 수 있다.
table = []
for i in range(9):
new = list(map(int, input().split()))
table.append(new)
def get_vailed(table):
for row in range(9):
for col in range(9):
if table[row][col] == 0:
return row, col
return None
def is_vailed(col, row , num):
for k in range(9):
if table[col][k] == num:
return False
for k in range(9):
if table[k][row] == num:
return False
newcol = (col//3) * 3
newrow = (row//3) * 3
for k in range(3):
for n in range(3):
if table[k+newcol][n+newrow] == num:
return False
return True
def sudoku(table):
if not get_vailed(table): # 모든 스도쿠가 꽉 차면
return True
col, row = get_vailed(table)
for num in range(1,10):
if is_vailed(col,row, num):
table[col][row] = num # 숫자를 넣어본다.
if sudoku(table):
return True
table[col][row] = 0 # 넣은 숫자를 뺀다.
sudoku(table)
for i in range(len(table)):
print(*table[i])
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 2294번 : 동전 2 (0) | 2023.07.24 |
---|---|
[백준] 1987번 :알파벳 (0) | 2023.07.23 |
[백준] 2585번 : 경비행기 (0) | 2023.07.23 |
[백준] 23083번 : 꿀벌 승연이 (0) | 2023.07.23 |
[백준] 19942번 : 다이어트 (0) | 2023.07.23 |