문제
첫째 줄에 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 |