BOJ - 5014

주의·2024년 2월 6일
0

boj

목록 보기
190/214

백준 문제 링크
스타트링크

❓접근법

  1. BFS를 사용했다.
  2. 모든 원소를 입력받고,
    방문 처리할 리스트 visited,
    버튼의 수를 저장할 answer를 만들어준다.
  3. bfs 함수를 만들것이다.
    엘리베이터로 이동할 수 있는지 확인할 변수 isFalse = False를 만든다.
    큐에서 원소를 뽑아 그 원소가 목표 지점인 g층과 같다면
    isFalse = True로 지정하고 break 해준다.
  4. 갈 수 있는 좌표는 u 만큼 위로, d 만큼 아래로 갈 수 있으므로
    [ x + u, x - d ] 2가지가 있다.
    좌표가 범위 안에 속하고, 아직 방문하지 않았을 때
    방문 처리하고, 큐에 넣고, answer[다음] = answer[현재] + 1 해준다.
  5. 마지막으로 isFalse를 return 해준다.
    s에 대해 함수를 실행했을 때
  • isFalse == False일 때 'use the stairs' 를 출력
  • isFalse == True일 때 answer[g] 를 출력하면 끝!

👌🏻코드

from collections import deque

f, s, g, u, d = map(int, input().split())

visited = [False] * (f + 1)
answer = [0] * (f + 1)

def bfs(x):
    queue = deque()
    queue.append(x)
    
    visited[x] = True
    
    isFalse = False
    
    while queue:
        
        x = queue.popleft()
        
        if x == g:
            isFalse = True
            break
        
        for i in [x + u, x - d]:
            if 1 <= i <= f:
                if not visited[i]:
                    
                    queue.append(i)
                    visited[i] = True
                    answer[i] = answer[x] + 1
                
    return isFalse

if bfs(s) == True:
    print(answer[g])
else:
    print('use the stairs')

0개의 댓글