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
- java
- 백준 17779
- 백준 파이썬
- JPA
- with recursive
- JVM
- re.split
- MSA
- spring cloud
- 백준 19238
- 백준
- 백준 17626
- 백준 16236
- spring oauth
- 백준 15685
- Coroutine
- Kotlin
- 파이썬
- spring security
- 백준 16235
- java 기술면접
- 프로그래머스
- Spring Boot
- Spring
- 백준 16719
- sql 기술면접
- 웹어플리케이션 서버
- MySQL
- 프로래머스
- springboot
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 |