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
- BFS
- web
- Math
- C언어
- 따라하면서 배우는 C언어
- greedy
- C
- BASIC
- 따라하며 배우는 C언어
- 생활코딩
- 따배씨
- udemy
- BOJ
- php
- sorting
- 인프런
- programmers
- dfs
- Algorithm
- Cleancode
- 백준
- server
- 정수론
- DP
- Python
- JavaScript
- 종만북
- String
- graph
- Algospot
Archives
- Today
- Total
몽상실현개발주의
[BOJ] 2580 / 스도쿠 / Python 파이썬 본문
[BOJ] 2580 / 스도쿠 / Python 파이썬
https://www.acmicpc.net/problem/2580
풀이
DFS 를 사용하는 백트래킹 문제이다.
여전히 습관적으로 모든 경로를 탐색하려고 시도하다 로컬에서도 time err 를 만나게 되었다.
고려해야 하는 경우만 탐색하도록 하자!
※Python 으로는 시간초과로 풀지 못하고, Pypy3 로 제출하여야 한다.
maps = []
for _ in range(9):
maps.append(list(map(int, input().split())))
zeroPosition = []
for y in range(9):
for x in range(9):
if not maps[y][x]:
zeroPosition.append([y, x])
resFlag = False
def getNums(y, x):
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for i in range(9):
if maps[i][x] in nums:
nums.remove(maps[i][x])
if maps[y][i] in nums:
nums.remove(maps[y][i])
if not nums:
return nums
I = y//3
J = x//3
for i in range(I*3, I*3+3):
for j in range(J*3, J*3+3):
if not nums:
return nums
if maps[i][j] in nums:
nums.remove(maps[i][j])
return nums
def DFS(cnt):
global resFlag
if resFlag:
return
if cnt == len(zeroPosition):
resFlag = True
for y in range(9):
print(" ".join(map(str, maps[y])))
return
Y, X = zeroPosition[cnt]
numList = getNums(Y, X)
for n in numList:
maps[Y][X] = n
DFS(cnt+1)
maps[Y][X] = 0
DFS(0)
'Algorithm PS > BOJ' 카테고리의 다른 글
[BOJ] 6603 / 로또 / Python 파이썬 (0) | 2021.08.09 |
---|---|
[BOJ] 1987 / 알파벳 / Python 파이썬 (0) | 2021.08.09 |
[BOJ] 1759 / 암호 만들기 / Python 파이썬 (0) | 2021.08.04 |
[BOJ] 5014 / 스타트링크 / Python 파이썬 (0) | 2021.08.04 |
[BOJ] 3108 / 로고 / Python 파이썬 (0) | 2021.08.03 |
Comments