Notice
Recent Posts
Recent Comments
Link
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

똥그래미 코딩공장

백준 5014번(스타트링크) 파이썬 본문

Algorithm

백준 5014번(스타트링크) 파이썬

동그라미_ssu 2023. 3. 13. 18:13

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

 

5014번: 스타트링크

첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다.

www.acmicpc.net

이 문제는 저번에 풀어 보았던 "숨바꼭질" 문제와 거의 동일하다고 볼 수 있다.

아니? 그냥 똑같다.

설명은 주석에 첨부해 놓았다.

아래는 코드이다.

from collections import deque
import sys
input = sys.stdin.readline

f,s,g,u,d = map(int,input().split())
count=[0]*(f+1) # 계단 
visited = [False]*(f+1) # 방문처리할 리스트

def bfs(S,G,U,D):
    q=deque() # 데크 선언
    q.append(S) # 처음 위치를 삽입
    visited[S] = True # 처음위치 방문처리

    while q:
        x = q.popleft()
        if x == G: # 스타트 링크의 층과 같으면
            print(count[x]) # 출력
            break
        for nx in (x+U,x-D): # 현위치에서 위로갈 층, 아래로갈 층을 탐색한다
            if 0<nx<f+1 and visited[nx] == False: # 범위 안벗어나고 방문하지 않았으면
                visited[nx] = True # 방문처리 해준다
                count[nx] = count[x]+1 # 움직일때마다 +1씩 늘려준다
                q.append(nx) # 데크 삽입
    
bfs(s,g,u,d)
if g != s and count[g] == 0: # 처음시작할때 같은 위치에 있지 않고 스타트 층을 방문하지 않았을때
    print("use the stairs")

별다른 코멘트가 필요 없는 문제인거같다.