똥그래미 코딩공장
백준 1967번(숨바꼭질) 파이썬 본문
https://www.acmicpc.net/problem/1697
1697번: 숨바꼭질
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
지금까지 풀었던 bfs 문제와 유형이 달랐다.
지금까지는 좌표를 상하좌우로 이동하여 푸는 문제들이였는데 이 문제는
상하좌우가 아닌 -1,+1,*2 이 3가지의 방향으로 이동한다. 좌표도 필요가 없는 문제였다.
문제를 보고 그래프가 머리에 그려지긴 했지만 지금까지 풀던 문제와 달라 조금 당황했다.
그리고 시간초과가 나는 이유도 몰랐다가 다른 분들의 풀이를 참고해 이유를 알게되었다.
import sys
from collections import deque
input = sys.stdin.readline
max = 100001
N,K = map(int,input().split())
count = [0]*max #시간초과가 나지 않게 크기를 설정해준다.
def bfs(a,b):
q=deque()
q.append(a)
while q:
x = q.popleft()
if x == b:
print(count[x])
break
for dx in (x-1,x+1,x*2): # 방향이 3개이므로 for문을 이렇게 선언해준다.
if (0<=dx<max and count[dx] == 0): # 리스트보다 크지않고 방문 안했을때!!
q.append(dx)
count[dx] = count[x]+1 # 반복될때마다 1씩 더해준다.
bfs(N,K)
아직 더... 해야 한다...
'Algorithm' 카테고리의 다른 글
| 백준 7576번(토마토) 파이썬 (0) | 2023.01.19 |
|---|---|
| 백준 1012번(유기농 배추) 파이썬 (0) | 2023.01.18 |
| 백준 2644번(촌수계산) 파이썬 (0) | 2023.01.15 |
| 백준 2583번(영역 구하기) 파이썬 (0) | 2023.01.13 |
| 백준 11725번(트리의 부모 찾기) 파이썬 (0) | 2023.01.11 |