티스토리 뷰

728x90

문제

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

 

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

트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이

programmers.co.kr

 

 

풀이 및 소스코드

처음에는 cross 덱에 time 덱까지 넣어서 cross.append([truck_weights[0], 0]) 이렇게 해주려고 했으나,

시간 1초 더하는 부분에서

TypeError: unsupported operand type(s) for +: 'int' and 'list' 

이런 오류가 떠서

2차원이 아닌 두 개의 덱으로 나눠주었다.

from collections import deque
def solution(bridge_length, weight, truck_weights):
    answer = 0
    cross = deque() #현재 다리 위에 있는 트럭의 무게
    time = deque() #현재 다리 위에 있는 트럭에 대한 시간을 담는 리스트
    passtruck = [] #건너기 성공한 트럭이 담길 스택(그냥 cnt 해줘도 됐을 것 같음)
    n = len(truck_weights)
    cross.append(truck_weights[0])
    time.append(0) #0초부터 시작
    nowindex = 0 #최근에 올린 트럭의 인덱스
    while (len(passtruck)<n): #트럭이 모두 건너가면 종료
        for i in range(len(time)): #1초의 시간이 흐름을 나타내줌
            time[i] += 1
        answer += 1 #이것역시
        if time[0] == bridge_length: #만약 제일 먼저 들어온 트럭의 거리가 다리 길이와 같으면 빼줌
            passtruck.append(cross.popleft())
            time.popleft()
        if nowindex+1 < n: #지나가야할 트럭이 남았다면 넣어주는 부분
            if sum(cross)+truck_weights[nowindex+1]<=weight:
                cross.append(truck_weights[nowindex+1])
                time.append(0)
                nowindex += 1            
            
    return answer+1
반응형