강의로 돌아가기
박희강

문제 오류

문제 설명을 다음과 같이 바꾸는게 좋을 것 같습니다:

한 번에 weight를 초과하는 무게가 올라오면 무너지는 길이 bridge_length의 다리가 있습니다. 이 다리를 건너기 위해 트럭 n대가 일렬로 대기하고 있습니다. 트럭 무게들의 배열 truck_weights가 주어졌을 때, 모든 트럭이 다리를 건너려면 최소 얼마의 시간이 필요한지 계산하세요.

  • '모든 트럭이 다리를 건넜다'는 것은 다리 위에 트럭이 단 한 대도 남아있지 않게 되는 시점을 의미합니다.
  • 트럭은 한 번에 1의 거리를 이동할 수 있습니다. 즉 트럭 한 대가 길이 bridge_length의 다리를 건너기 위해서는 bridge_length만큼의 시간이 필요합니다.
  • 트럭의 크기는 1입니다. 즉 길이 bridge_length인 다리 위에 한 번에 올라갈 수 있는 트럭의 수는 최대 bridge_length대 입니다.
  • 트럭이 일렬로 대기하고 있는 도로는 너무 좁아서 오직 순서대로 다리에 진입할 수 있습니다(뒤의 트럭이 앞의 트럭을 앞질러 다리에 진입할 수 없습니다).
  • 모든 트럭은 한 번에 '유기적으로' 움직일 수 있습니다. 한 트럭이 다리에서 빠져나감과 동시에 다른 트럭이 다리 위로 올라올 수 있습니다. 이때 최종적으로 다리 위에 올라온 트럭들의 무게의 합이 weight 이하라면 다리는 무너지지 않습니다(이동 과정 중의 연속적인 무게 변화는 무시합니다).
  • 1 <= bridge_length <= 10,000
  • 1 <= weight <= 10,000
  • 1 <= n = len(truck_weights) <= 10,000
  • truck_weights의 원소들의 크기는 1 이상 weight 이하
작성중인 코드―solution.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from collections import deque

def solution(bridge_length, weight, truck_weights):
    time = 0
    cur_weight = 0

    ws = deque(truck_weights)
    q = deque()
    while ws or q:
        time += 1
        while q and q[0][1] == time:
            w, _ = q.popleft()
            cur_weight -= w

        if ws:
            if len(q) < bridge_length and cur_weight + ws[0] <= weight:
                w = ws.popleft()
                q.append((w, time + bridge_length))
                cur_weight += w

    return time
  • limhada

    저도 문제 설명이 좀 빈약하다고 생각했습니다

    limhada―2023.09.09 15:56
0 개의 답변
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다.