[프로그래머스]다리를 지나는 트럭-스택/큐
SW개발/코딩테스트

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

문제 설명

 

def solution(bridge_length, weight, truck_weights):
    queue = [0] * bridge_length
    cnt = 0
    while queue:
        cnt += 1
        queue.pop(0)
        if truck_weights:
            if sum(queue) + truck_weights[0] <= weight :
                queue.append(truck_weights.pop(0))
            else:
                queue.append(0)
        
    return cnt

 

코드 설명

다리의 길이 만큼 리스트를 선언하고 0으로 초기화한다. (다리에 트럭이 올라온지 체크하기 위한 용도) 시간초를 세기 위한 cnt 변수를 0으로 초기화한다. 그 후 큐에 값이 있는 동안 반복문을 수행한다. 1초를 증가시켜 주고 큐에서 한개를 꺼내 자리를 비워준다. 만약 truck_weights 가 존재한다면 (대기 트럭이 있다면), 큐를 전부 더한 값과 앞으로 들어올 트럭의 무게를 더해서 다리의 한계보다 적다면 대기 트럭에서 원소를 꺼내와 큐에 넣어준다. (다리에 트럭의 무게만큼 올라와 있음을 표시) 다리의 한계 보다 클 시에는 트럭이 올라갈 수 없으므로 다시 0을 넣어 큐를 유지해준다.

 

Point: 다리를 일련의 큐로 생각하여 준다. 큐에 있는 트럭의 무게와(큐를 합산한 결과) 대기중인 트럭의 무게를 합산한 결과가 다리의 한계보다 적다면 큐에 넣어주고 그렇지 않다면 큐의 빈자리를 다시 0으로 채워준다.

728x90