본문 바로가기

algorithm/백준알고리즘

[백준알고리즘] 5014번: 스타트링크 -Python

728x90

[백준알고리즘] 5014번: 스타트링크 -Python

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

 

5014번: 스타트링크

문제 강호는 코딩 교육을 하는 스타트업 스타트링크에 지원했다. 오늘은 강호의 면접날이다. 하지만, 늦잠을 잔 강호는 스타트링크가 있는 건물에 늦게 도착하고 말았다. 스타트링크는 총 F층으로 이루어진 고층 건물에 사무실이 있고, 스타트링크가 있는 곳의 위치는 G층이다. 강호가 지금 있는 곳은 S층이고, 이제 엘리베이터를 타고 G층으로 이동하려고 한다. 보통 엘리베이터에는 어떤 층으로 이동할 수 있는 버튼이 있지만, 강호가 탄 엘리베이터는 버튼이 2개밖에 없

www.acmicpc.net

이번 문제는 BFS 방식으로 풀었다.

 

나머지는 간단했다. 방문했던 층인지 점검하고 올라갈 수 있으면 u만큼 올라가고, 내려갈 수 있으면 d만큼 내려갔다.

 

최대공약수를 이용하신 분도 본 것 같은데 어떻게 했는지 보다가 피곤해서 포기했다 :)

import sys
from collections import deque

def bfs():
    queue = deque([(s, 0)])
    visit = [0] * (f+1)
    visit[s] = 1
    
    while queue:
        q, c = queue.popleft()
        if q == g:
            return c

        c += 1
        if q-d >= 1 and not visit[q-d]:
            visit[q-d] = 1
            queue.append((q-d, c))
        if q+u <= f and not visit[q+u]:
            visit[q+u] = 1
            queue.append((q+u, c))
    return -1

f, s, g, u, d = map(int, sys.stdin.readline().split())
ans = bfs()
if ans >= 0:
    print(ans)
else:
    print("use the stairs")

 

잘못된 점이나 부족한 점 지적해주시면 감사하겠습니다

728x90