티스토리 뷰

 

 

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

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

programmers.co.kr

<풀이>

 

다리를 건너는 모양새가 큐의 자료구조와 닮았다고 생각하였고,

popleft()를 많이 활용하게 될 것 같아 deque를 받아와서 활용하였다.

 

자세한 풀이는 주석으로 달아놨다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from collections import deque
def solution(bridge_length, weight, truck_weights):
    answer = 0
    
    # [다리를 건너는 트럭]과 [대기 트럭] 둘 다 popleft()를 수행해주기 위해 deque로 변환
    bridge = deque()
    trucks = deque(truck_weights)
    
    # [대기 트럭]과 현재 [다리를 건너는 트럭]이 둘다 비워지면 반복문 끝
    while trucks or bridge:
        # 1초 추가
        answer += 1
        # [다리를 건너는 트럭]이 있으면 트럭을 이동 시켜준다.
        if bridge:
            # 다리 끝까지 다다른 트럭을 통과시켜준다.
            if bridge[0][1== bridge_length:
                bridge.popleft()
            # 남은 트럭을 이동시켜 준다.
            for t in bridge:
                t[1+= 1
        # [다리를 건너는 트럭]의 무게를 전부 합한 값
        bridge_weights = sum(map(lambda x: x[0], bridge))
        # [대기 트럭]이 남아있고 트럭이 들어갈 길이가 남고 다리가 다음 트럭의 무게를 감당할 수 있다면
        if trucks and len(bridge) < bridge_length and bridge_weights + trucks[0<= weight:
            # 다음 트럭을 [다리를 건너는 트럭]에 추가시켜 준다.
            bridge.append([trucks.popleft(), 1])
            
    return answer
cs
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함