문제

첫째 줄에 F, S, G, U, D가 주어집니다.

U는 올라가는 엘리베이터 버튼을 의미하고, D는 내려가기 위한 버튼을 의미합니다.

엘리베이터는 F층까지 있고, S층에 있는 강호가 G층으로 가기 위해 최소로 눌러야 하는 버튼 수를 리턴해야 합니다.

 - G에 도착할 수 없다면 "use the stairs"를 출력합니다.

 

문제풀이

1. 각 층을 리스트로 표현합니다.

 - 0이면 아직 방문하지 않은 층이고, 1이면 방문한 적 있는 층입니다.

 

2. 도착해야 하는 층인 G를 향해 최대한 U 버튼을 누릅니다.

 - G층 이상으로는 올라갈 수 없습니다.

 

 - 이미 리스트 값이 1인 곳에는 재방문하지 않습니다.

 

 - G에 도착했다면, 리스트의 총합을 정답으로  리턴합니다.

 

 - 각 층에 도착할 때 마다 리스트의 값을 1로 변경합니다.

 - 현재 위치를 갱신합니다.

 

 

3. 더 이상 G를 향해 올라갈 수 없다면 D만큼 내려갑니다.  

 - 1층 이하로는 내려갈 수 없습니다.

 

 - 이미 리스트 값이 1인 곳에는 재방문하지 않습니다.

 

 - G에 도착했다면, 리스트의 총합을 정답으로  리턴합니다.

 

 - 각 층에 도착할 때 마다 리스트의 값을 1로 변경합니다.

 - 현재 위치를 갱신합니다.

 

4. 2번와 3번을 반복적으로 실행합니다.

 - 2와 3번이 더 이상 실행될 수 없다면, 반복을 종료하고 use the stairs를 출력합니다.

코드

import sys
# sys.stdin = open("C:/Users/JIn/PycharmProjects/coding_Test/input.txt", "rt")
F, S, G, U, D = map(int, input().split())

visited = [0] * (F + 1)  # 0: 방문하지 않음, 1: 방문한 적 있음
visited[S] = 1
q = [S]

while q:
    curr_f = q.pop()
    if visited[G] == 1:
        print(sum(visited)-1)
        break

    if (curr_f + U) <= G and visited[curr_f + U] == 0:
        visited[curr_f + U] = 1
        q.append(curr_f + U)

    elif (curr_f - D) >= 1 and visited[curr_f - D] == 0:
        visited[curr_f - D] = 1
        q.append(curr_f - D)
else:
    print("use the stairs")

'코딩 테스트' 카테고리의 다른 글

[백준 1599] 민식어  (0) 2021.03.13
[백준 5052] 전화번호 목록  (0) 2021.03.08
[백준 11508] 2+1 세일  (0) 2021.02.28
[백준 13458] 시험 감독  (0) 2021.02.24
[프로그래머스] 위장  (0) 2021.02.22

+ Recent posts