프로그래밍/Python

프로그래머스_python lv2. 다리를 지나는 트럭(스택, 큐 - deque)

O'bin 2024. 4. 18. 16:36

<문제 링크>

https://school.programmers.co.kr/learn/courses/30/lessons/42583?language=python3

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

<정답 코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from collections import deque
 
def solution(bridge_length, weight, truck_weights):
    time = 0
    current_weight = 0
    
    on_bridge = deque([0* bridge_length)
    truck_weights = deque(truck_weights)
    
    while len(truck_weights) != 0:
        time += 1
        # on_bridge에서 트럭이 나갈때마다 그 트럭 무게 current_weight에서 빼기
        current_weight -= on_bridge.popleft()   
 
        """새 트럭 진입 시도"""
        # 새 트럭 수용 가능
        if current_weight + truck_weights[0<= weight:     
            current_weight += truck_weights[0]
            # 새 트럭을 대기열(truck_weights)에서 제거, on_bridge에 추가
            on_bridge.append(truck_weights.popleft())       
        # 새 트럭 수용 불가
        else:                                              
            on_bridge.append(0)     # on_bridge에 트럭 무게 대신 0 추가
    
    # 모든 트럭이 다리를 완전히 벗어나기까지 걸리는 총 시간        
    time += bridge_length                                   
 
    return time
cs

 

 

문제에서 주어진 입출력 예시
정답 코드에 따른 입출력 예시 작동 과정

 

 

 

< 중요 포인트 >

  • 다리 길이만큼의 list 생성 후 트럭 추가 가능하면 대기열에 있는 트럭 추가, 불가능하면 0 추가
  • 모든 트럭이 다리를 벗어나는데 걸리는 시간을 계산해야 하므로 마지막에 다리 길이만큼 시간 추가(line 26)