Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- loop
- Unity
- github
- 문제풀이
- 백준
- Programming
- String
- 프로그래밍
- w3school
- 시작해요 언리얼 2022
- W3Schools
- Algorithm
- dynamic
- Basic
- Class
- 기초
- guide
- 파이썬
- Tutorial
- 오류
- DP
- dfs
- python
- C#
- UE5
- c++
- 재귀
- Unreal Engine 5
- parameter
- Material
Archives
- Today
- Total
행복한 개구리
백준 22.01.30. 2580번 - 스도쿠 본문


sudoku = []
blank = []
for i in range(9):
sudoku.append(list(map(int, input().strip().split())))
for i in range(9):
for j in range(9):
if sudoku[i][j] == 0:
blank.append((i, j))
def CheckRow(x, val):
for i in range(9):
if sudoku[x][i] == val:
return False
return True
def CheckCol(y, val):
for i in range(9):
if sudoku[i][y] == val:
return False
return True
def CheckSquare(x, y, val):
startX = x // 3 * 3
startY = y // 3 * 3
for i in range(3):
for j in range(3):
if sudoku[startX + i][startY + j] == val:
return False
return True
def DFS(idx):
if idx == len(blank):
for i in range(9):
print(*sudoku[i])
exit(0)
for i in range(1, 10):
x = blank[idx][0]
y = blank[idx][1]
if CheckRow(x, i) and CheckCol(y, i) and CheckSquare(x, y, i):
sudoku[x][y] = i
DFS(idx + 1)
sudoku[x][y] = 0
DFS(0)
- 스도쿠의 규칙은 1~9의 숫자가 같은 행, 열, 3x3 정사각형 안에 중복되지 않으면 됩니다
- 스도쿠의 경우엔 이차원 배열인 좌표(x, y)에 값(value)이 주어집니다.
- sudoku[1][3] = 7 과 같은 형식입니다.
- 따라서 CheckCol, CheckRow, CheckSquare 함수를 생성하여 중복여부를 판단했습니다.
- CheckSquare의 startX, strartY는 3x3인 정사각형의 리스트 내에서의 인덱스를 고려하여 도출해낸 인덱스입니다.
- 이어서 for반복문에 따라 스도쿠의 빈칸에 1~9의 수를 넣어가며 Col, Row, Square중복여부를 판단하고 적합하다면 재귀로 다음 칸의 값 탐색을 시작합니다.
- 알고리즘이 틀렸을 때를 위해 재귀 이후에는 검색했던 칸의 값을 다시 0으로 초기화시켜줍니다.
'Algorithm > BaekJoon' 카테고리의 다른 글
백준 22.01.31. 14889번 - 스타트와 링크 (0) | 2022.01.31 |
---|---|
백준 22.01.30. 14888번 - 연산자 끼워넣기 (0) | 2022.01.30 |
백준 22.01.28. 9663번 - N-Queen (0) | 2022.01.28 |
백준 22.01.28. 15652번 - N과 M (4) (0) | 2022.01.28 |
백준 22.01.28. 15651번 - N과 M (3) (0) | 2022.01.28 |