Level 2. 다리를 지나는 트럭

Pear_Mh·2021년 7월 20일
0

Programmers-Level 2.

목록 보기
28/40

다리를 지나는 트럭

코딩테스트 연습 > 스택/큐 > 다리를 지나는 트럭

[https://programmers.co.kr/learn/courses/30/lessons/42583]


문제 설명

# 문제 본문

트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈 수 있으며, 다리는 weight 이하까지의 무게를 견딜 수 있습니다., 다리에 완전히 오르지 않은 트럭의 무게는 무시합니다.

예를 들어, 트럭 2대가 올라갈 수 있고 무게를 10kg까지 견디는 다리가 있습니다. 무게가 7, 4, 5, 6kg인 트럭이 순서대로 최단 시간 안에 다리를 건너려면 다음과 같이 건너야 합니다.

따라서, 모든 트럭이 다리를 지나려면 최소 8초가 걸립니다.

solution 함수의 매개변수로 다리에 올라갈 수 있는 트럭 수 bridge_length, 다리가 견딜 수 있는 무게 weight, 트럭 별 무게 truck_weights가 주어집니다. 이때 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 return 하도록 solution 함수를 완성하세요.

# 제한사항

- bridge_length는 1 이상 10,000 이하입니다.
- weight는 1 이상 10,000 이하입니다.
- truck_weights의 길이는 1 이상 10,000 이하입니다.
- 모든 트럭의 무게는 1 이상 weight 이하입니다.

문제 풀이

# 1st trial
# Input value
bridge_length, weight, truck_weights = 2,10,[7,4,5,6]
# Process
bridge_length = [0] * bridge_length # Set bridge_length list
answer = 0
while bridge_length: # Until bridge_length == []
    answer += 1 # time count +=1
    bridge_length.pop(0) # bridge_length update
    if truck_weights: # Until truck_weights == []
        if weight >= sum(bridge_length)+truck_weights[0]: # waiting truck + already on bridge <= bridge_weight
            bridge_length.append(truck_weights.pop(0)) # add truck weight
        else:
            bridge_length.append(0) # add 0 value
answer

python from collections import deque를 사용하였으나, 위의 방법처럼 pop(0)을 하는 것이 더 효율적이었습니다.(아직 이유는 찾지 못했습니다.) 하지만 while문이 반복될 때 마다 python sum(bridge_length)를 반복하는 것이 연산속도 저하의 문제가 되지 않을까 생각됩니다.


전체 코드

def solution(bridge_length, weight, truck_weights):
    bridge_length = [0] * bridge_length
    answer = 0
    while bridge_length:
        answer += 1
        bridge_length.pop(0)
        if truck_weights:
            if weight >= sum(bridge_length)+truck_weights[0]:
                bridge_length.append(truck_weights.pop(0))
            else:
                bridge_length.append(0)
    return answer
profile
Beyond the new era.

0개의 댓글

관련 채용 정보