#문제
1697번: 숨바꼭질
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
#풀이 & 학습한 내용
"또 다른 BFS 최단거리 연습문제"입니다. BFS를 통해 가장 최소횟수를 구해주며, 현재위치의 범위와 방문여부로 중복을 제거해야 메모리초과에 걸리지 않고 문제를 해결할 수 있습니다.
#소스코드
from collections import deque #큐 사용하기 위해
def bfs(q):
while q: #K위치에 도달할 때까지 계속 반복(도달불가능한 경우 없으므로 무한반복해도 된다)
v=q.popleft() #큐에서 하나 꺼내기
nowX=v[0] #큐에서 꺼낸거의 현재위치
count=v[1] #큐에서 꺼낸거까지의 걸린횟수
if nowX==K: #K에 도달했다면 거기까지 걸린횟수출력(★bfs한거니까 최소횟수)
return count
if(0<=nowX-1) and visited[nowX-1]==False: #이렇게 체크안해주면 메모리초과
visited[nowX-1]=True
q.append([nowX-1,count+1])
if(nowX+1<=100000) and visited[nowX+1]==False:
visited[nowX+1]=True
q.append([nowX+1,count+1])
if(0<2*nowX<=100000) and visited[2*nowX]==False:
visited[2*nowX]=True
q.append([2*nowX,count+1])
N,K=map(int,input().split()) #N에서 K로 가야한다
visited=[False]*100001 #방문여부 확인용(중복방지위해)
visited[N]=True #출발점 방문처리
q=deque([[N,0]]) #[현재위치, 현재위치까지 걸린 횟수]를 큐에 넣기
print(bfs(q))
github.com/HoYoungChun/Algorithm_PS/blob/master/DFS%26BFS/BOJ_1697.py
HoYoungChun/Algorithm_PS
Baekjoon Online Judge, Programmers problem solving by Python, C++ - HoYoungChun/Algorithm_PS
github.com
'Algorithm > DFS&BFS' 카테고리의 다른 글
| [Python] 백준 7562번 : 나이트의 이동 (S2) - DFS&BFS단계별10 (0) | 2021.03.04 |
|---|---|
| [Python] 백준 2206번 : 벽 부수고 이동하기 (G4) - DFS&BFS단계별9 (0) | 2021.03.03 |
| [Python] 백준 7569번 : 토마토 (S1) - DFS&BFS단계별7 (0) | 2021.03.03 |
| [Python] 백준 7576번 : 토마토 (S1) - DFS&BFS단계별6 (0) | 2021.03.03 |
| [Python] 백준 2178번 : 미로 탐색 (S1) - DFS&BFS단계별5 (0) | 2021.02.03 |