본문 바로가기
TIL - 프로그래밍/Python 알고리즘

[프로그래머스] 다리를 지나는 트럭 - Python

by chaemj97 2023. 3. 6.
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/42583

 

프로그래머스

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

programmers.co.kr


  • 풀이
    • 다리를 건너는 과정이 필요하므로 deque를 통해 다리를 건너는 과정을 표현
    • 1초가 흐르면 다리를 1칸씩 건너므로 deque.popleft()로 다리의 맨 앞 부분 제거
    • 트럭이 올라갈 수 있으면 트럭을 추가 / 없으면 0을 추가
    • 마지막에 올라간 트럭이 다리를 다 건너는 시간 추가!!
  • 코드
from collections import deque
# bridge_length : 올라갈 수 있는 최대 트럭 수
# weight : 다리가 견딜 수 있는 무게

def solution(bridge_length, weight, truck_weights):
    time = 0
    
    truck = deque(truck_weights)
    # 트럭이 올라갈 수 있으면 트럭 추가 / 없으면 0추가
    bridge = deque([0]*bridge_length)
    # 현재 다리 위 무게
    total = 0
    
    while truck:
        # 1초 흐르면서 1칸씩 이동
        time += 1
        # 다리 맨 앞에 무게가 빠짐
        total -= bridge[0]
        bridge.popleft()
        
        # 트럭이 올라갈 수 있는가? (무게가 가능한가?)
        if total + truck[0] <= weight:
            w = truck.popleft()
            total += w
            bridge.append(w)
        # 트럭이 올라갈 수 없다.
        else:
            bridge.append(0)
            
    # 마지막에 올라간 트럭 다리 건너는 시간 추가
    return time + bridge_length
728x90
반응형

댓글