For Programmer
백준 13549번 파이썬 문제풀이(BFS - 숨바꼭질 3) 본문
728x90
이 문제는 다른 숨바꼭질 문제들과 다르게 2*x 로이동할 때 0초가 걸린다. 따라서 0초가 걸리는 경우를 가장먼저 처리해주어야 한다. 그 경우만 잘 생각한다면 쉽게 해결할 수 있다. 다른 분들의 코드를 보면 2*x 처리를 큐에 추가할 때 appendleft 로 처리를 했는데 그렇게 해주어도 된다.
from collections import deque
def bfs(start):
queue = deque([[start, 0]])
while queue:
x, cnt = queue.popleft()
# find 함수 (자기 노드의 부모를 찾아가는 함수)
if x == K:
return cnt # 본인의 노드까지 리스트에 넣어 반환
for i in range(3)[::-1]:
if i != 2:
nx = x + dx[i]
else:
nx = x * dx[i]
# nx가 범위를 벗어나지 않고 방문을 안했고 출발지가 아니라면
if 0 <= nx <= 100000 and not visited[nx]:
visited[nx] = True # 방문처리
if i != 2:
queue.append([nx, cnt + 1])
else: # 순간이동한다면 초 추가 없이 큐에 넣어준다.
queue.appendleft([nx, cnt])
N, K = map(int, input().split())
dx = [-1, 1, 2] # 이동방향 처리
visited = [False] * 100001 # 방문처리할 리스트
cnt = bfs(N)
print(cnt)
728x90
'코팅테스트 > 백준 문제 모음' 카테고리의 다른 글
백준1546번 파이썬 문제풀이(1차원 배열 - 평균) (0) | 2022.01.13 |
---|---|
백준1261번 파이썬 문제풀이(알고스팟) - (BFS, 다익스트라 ) (0) | 2021.12.10 |
백준 14226번 파이썬 문제풀이(BFS - 이모티콘) (0) | 2021.11.24 |
백준 13913번 파이썬 문제풀이(BFS - 숨바꼭질 4) (0) | 2021.11.24 |
백준 1697번 파이썬 문제풀이(BFS - 숨바꼭질) (0) | 2021.11.23 |
Comments