[백준 BFS] 스타트링크(python)

이진규·2022년 12월 27일
1

백준(PYTHON)

목록 보기
112/115

문제

https://www.acmicpc.net/problem/5014

나의 코드

"""

from collections import deque

F, S, G, U, D = map(int, input().split())

step = [-1] * (1000000+1)
visited = [False] * (1000000+1)

def bfs(s):
    visited[s] = True
    step[s] = 0
    q = deque([(s, 0)])

    while q:
        node, cnt = q.popleft()

        if node == G:
            break

        for x in (node+U, node-D):
            if 1 <= x <= F and not visited[x]:
                visited[x] = True
                step[x] = cnt+1
                q.append((x, cnt+1))

bfs(S)
print(step[G] if step[G] != -1 else "use the stairs")
    

배운점

전형적인 BFS 문제로 숨바꼭질 문제하고 비슷했다.

처음에 step 배열을 전부 0으로 초기화 하고 마지막 print()문을 step[G] if step[G] != 0 else "use the stairs")과 같이 작성했는데, 이렇게 하면 S == G 즉 시작하는 지점하고 도착하는 지점이 같으면 "use the stairs"이 출력된다.

그래서 step 배열을 전부 -1로 초기화 하고 BFS가 돌기전에 시작하는 부분만 0으로 초기화 해줌으로써 시작지점과 도착지점이 같아도 제대로 된 정답이 출력될 수 있도록 함.

profile
항상 궁금해하고 공부하고 기록하자.

0개의 댓글