프로그래머스

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

programmers.co.kr


나의 풀이

  • 트럭이 진입한 시간, 다리 위에서의 무게를 계산하는 과정에서 pop(0)가 많이 발생하므로 Queue를 활용했다.
  • 트럭이 막 진입한 시간을 0초, 진입 후에 1초가 된다는 생각으로 answer 값을 활용했다.
from collections import deque

def solution(bridge_length, weight, truck_weights):
    
    truck_weights = deque(truck_weights)
    # 다리에 트럭이 진입한 시간
    time_list = deque()
    # 현재 다리 위 트럭 무게
    weight_now = deque()
    # 총 시간
    answer = 0
    # 모든 트럭 진입 후 종료
    while truck_weights:
        # 진입할 트럭
        temp_weight = truck_weights[0]
        # 무게 + 트럭 개수 만족
        if (sum(weight_now) + temp_weight <= weight) and len(time_list) < bridge_length:
            # 다리 위 무게
            weight_now.append(truck_weights.popleft())
            time_list.append(answer)
        # 트럭 진입 : 시간 경과
        answer += 1
        # 통과 조건
        if (answer - time_list[0]) == bridge_length:
            weight_now.popleft()
            time_list.popleft()
    # 마지막 진입한 트럭이 나올 때까지의 시간
    answer += (bridge_length)
    
    return answer

 

다른 사람 풀이

  • [ic]bridge_length[/ic] 만큼의 다리를 선언하고 조건을 확인해 차를 진입시킨다.
  • 이 경우 truck_weights가 입력될 때까지 bridge의 길이는 bridge_length 만큼 유지하다가 점차 줄어들게 되고 이를 통해 answer를 구할 수 있다!
def solution(bridge_length, weight, truck_weights):
    
    answer = 0
    bridge = [0 for _ in range(bridge_length)]
    
    while bridge:
        
        answer += 1
        bridge.pop(0)
        
        if truck_weights:
            if sum(bridge) + truck_weights[0] <= weight:            
                t = truck_weights.pop(0)
                bridge.append(t)
            else:
                bridge.append(0)
                 
         
    return answer

 

 

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

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

velog.io