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 |
Tags
- 파이썬
- 백준 16236
- springboot
- JPA
- 백준 19238
- MSA
- 프로래머스
- sql 기술면접
- java 기술면접
- spring security
- spring oauth
- MySQL
- 백준 16719
- Coroutine
- Spring Boot
- 웹어플리케이션 서버
- 백준 17626
- with recursive
- 백준 15685
- 백준 16235
- 백준 17779
- 프로그래머스
- JVM
- 백준
- spring cloud
- Spring
- Kotlin
- java
- re.split
- 백준 파이썬
Archives
- Today
- Total
시작이 반
[백준] 2580번(python 파이썬) 본문
SMALL
백트래킹으로 구현할 수 있는 문제이다.
우선 index 0 ~ 80 의 칸을 검사한다.
해당 칸이 빈칸일경우 해당 칸에 들어갈 수 있는 숫자를 구한다.
def AbleNumber(n, m):
ableNumber = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for i in range(9):
if graph[n][i] in ableNumber:
ableNumber.remove(graph[n][i])
for i in range(9):
if graph[i][m] in ableNumber:
ableNumber.remove(graph[i][m])
sub_n = n // 3
sub_m = m // 3
for i in range(sub_n * 3, sub_n * 3 + 3):
for j in range(sub_m * 3, sub_m * 3 + 3):
if graph[i][j] in ableNumber:
ableNumber.remove(graph[i][j])
return ableNumber
가능한 숫자를 구하면
해당 칸에 하나씩 넣으면서 재귀를 돌린다.
재귀를 돌리던도중에 해당 칸에 들어갈 숫자가 없으면 False를 반환을 하게된다. 그러면 이전 상태로 되돌아 가게되고
다음으로 가능한 숫자를 넣게된다.
이후에 다시 재귀를 돌려 다음 칸들을 확인한다.
graph = [list(map(int, input().split())) for _ in range(9)]
def BackT(idx):
if idx == 81:
return True
for i in range(idx, 81):
sub_n = i // 9
sub_m = i % 9
if graph[sub_n][sub_m] != 0:
if i == 80:
return True
continue
ableNumber = AbleNumber(sub_n, sub_m)
for j in ableNumber:
graph[sub_n][sub_m] = j
if BackT(i + 1):
return True
graph[sub_n][sub_m] = 0
return False
BackT(0)
for i in range(9):
for j in range(9):
print(graph[i][j], end=' ')
print()
LIST
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 14889번(python 파이썬) (1) | 2021.02.03 |
---|---|
[백준] 14888번(python 파이썬) (0) | 2021.02.02 |
[백준] 9663번(python 파이썬) (0) | 2021.01.28 |
[백준] 15657번(python 파이썬) (0) | 2021.01.10 |
[백준] 15654번(python 파이썬) (0) | 2021.01.10 |