📖 문제
🧑🏻💻 풀이 과정
1) 문제 이해 및 접근
목표하는 층을 이동하기 위해 최소한으로 누르는 버튼 횟수를 구해야하여 BFS 탐색을 이용하였습니다.
2) 알고리즘
- BFS
3) 풀이 코드
사용 언어 - Python
import sys
from collections import deque
sys.stdin = open('input.txt')
def bfs(start): # BFS 탐색
q = deque([start])
visited[start] = 0 # 시작 층은 0번 눌러서 도착하므로 0으로 초기화
while q:
floor = q.popleft()
n1, n2 = floor + U, floor - D # 올라가는 층, 내려가는 층
if n1 <= F and visited[n1] == -1: # 올라갈 수 있고, 아직 방문한적 없으면
visited[n1] = visited[floor] + 1 # 방문처리 및 다음 탐색
q.append(n1)
if 1 <= n2 and visited[n2] == -1: # 내려갈 수 있고, 아직 방문한적 없으면
visited[n2] = visited[floor] + 1 # 방문처리 및 다음 탐색
q.append(n2)
F, S, G, U, D = map(int, sys.stdin.readline().split()) # 건물 최대 높이, 시작 층, 목표 층, 올라가는 층, 내려가는 층
visited = [-1] * (F+1) # 각 층별 방문 여부
bfs(S) # 탐색 시작
if visited[G] == -1: # 목표 층에 도달 못하면 계단 이용 출력
print('use the stairs')
else: # 목표에 도달 가능하면 누르는 버튼의 최소 횟수 출력
print(visited[G])
📝 결과 및 학습한 내용
1) 어려웠던 내용
특별히 없습니다.
2) 새롭게 학습한 내용
특별히 없습니다.
🔗 문제 링크
- https://www.acmicpc.net/problem/5014
※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다
'알고리즘 문제풀이 > Python' 카테고리의 다른 글
[프로그래머스] 정수삼각형 (0) | 2022.03.26 |
---|---|
[백준] 2146 다리 만들기 (0) | 2022.03.24 |
[백준] 13460 구슬탈출 2 (0) | 2022.03.22 |
[프로그래머스] 여행경로 (0) | 2022.03.21 |
[프로그래머스] 네트워크 (0) | 2022.03.20 |
댓글