기록하고 까먹지 말기

5014 본문

전공/백준

5014

yha97 2023. 2. 28. 11:42

날짜 : 2023. 02. 28

사용 언어 : python

 

문제

 

 

코드

import sys
from collections import deque

f, s, g, u, d = map(int, sys.stdin.readline().split())  # 층수, 현재, 목표, 위, 아래
res = list()
visited = [False] * (f + 1)
count = [0] * (f + 1)


def bfs(cur):
    visited[cur] = True
    q = deque()
    q.append(cur)
    while q:
        now = q.popleft()
        if now == g:
            return count[g]
        for i in (now + u, now - d):  # 위, 아래로 이동
            if i in range(1, f + 1) and not visited[i]:  # 범위 포함, 방문 x
                visited[i] = True  # 방문처리
                count[i] = count[now] + 1  # 버튼횟수 최신화
                q.append(i)  # push
    if count[g] == 0:  # 방문전력이 없다면
        return -1


res = bfs(s)
if res < 0: print("use the stairs")
else: print(res)

 

 

풀이

- 각 층별 이동횟수, 방문여부 체크를 위한 리스트를 만든 후 bfs를 통해 위아래로 이동하면서 각 층수를 체크한다.

- 건물은 0층은 존재하지 않고 1층부터 존재하기 때문에 이를 주의한다.

 

 

알게된 점

- 단순 while문으로 해결하려 하다보니 문제가 복잡해졌다.

- 다른사람의 풀이를 간단히 참고해보니까 위, 아래로의 케이스를 확인하고 거기서 분기하여 방문처리를 하는 것이 더 효율적이었다.

- 다른 문제중에 숨바꼭질 문제도 있으니 풀어보아야겠다.

 

 

참고 사이트

- https://letalearns.tistory.com/43

 

'전공 > 백준' 카테고리의 다른 글

14502  (0) 2023.03.02
1182  (0) 2023.03.01
1926  (0) 2023.02.23
1976  (0) 2023.02.22
11286  (0) 2023.02.15