새로운 블로그로 이전 작업을 진행하고 있어 포스트가 새로 작성되고 있지 않습니다.

빠른 시일 내에 새로운 블로그로 인사드리겠습니다.

새로운 블로그 : https://unho.vercel.app/

본문 바로가기
알고리즘 문제풀이/Python

[백준] 5014 스타트링크

by 언호 2022. 3. 23.

📖 문제


🧑🏻‍💻 풀이 과정

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

 

5014번: 스타트링크

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

www.acmicpc.net

 

 

※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다

'알고리즘 문제풀이 > Python' 카테고리의 다른 글

[프로그래머스] 정수삼각형  (0) 2022.03.26
[백준] 2146 다리 만들기  (0) 2022.03.24
[백준] 13460 구슬탈출 2  (0) 2022.03.22
[프로그래머스] 여행경로  (0) 2022.03.21
[프로그래머스] 네트워크  (0) 2022.03.20

댓글