ProblemSolving/Stack, Queue

프로그래머스 다리를 지나는 트럭 (파이썬)

OSNIM 2022. 5. 5. 19:42
반응형

Level 2 스택/큐

 

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

 

코딩테스트 연습 - 다리를 지나는 트럭

트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈

programmers.co.kr

 

정답 코드

from collections import deque
def solution(bridge_length, weight, truck_weights):
    answer = 0
    trucks = deque(truck_weights) # 트럭의 무게
    onBrigde = deque([]) # [다리 위에 있는 트럭들의 무게, 경과 시간]
    total = 0 #다리 위 트럭들의 무게 합
    w = 0 # 현재 트럭  
    while trucks or onBrigde:
        # 다리 위에 트럭이 있는 경우
        if onBrigde:
        	#트럭 위에서 경과 시간이 다리 길이보다 긴 경우 
            if onBrigde[0][1] >= bridge_length:
                tempw, temps = onBrigde.popleft()
                total -= tempw
            #트럭 위의 경과 시간 1증가
            for i in range(len(onBrigde)):
                onBrigde[i][1] += 1
		
        # 대기 중인 트럭이 있는 경우  
        if trucks:
            # 다리 위에 새 트럭을 올릴 수 있는 경우 
            if total + trucks[0] <= weight:
                w = trucks.popleft()
                onBrigde.append([w, 1])
                total += w
		
        # 1초 증가
        answer += 1
    return answer

결과 및 정리

 

트럭이 다리 위에 완전히 올라가야 시간을 세고 트럭이 완전히 다리를 벗어나야 1초를 증가시키는 것이 약간 헷갈렸지만 경우의 수를 차근차근 나누었더니 쉽게 해결할 수 있었습니다.

반응형