코드
import sys
from collections import deque
input = sys.stdin.readline
n, w, L = map(int, input().split())
trucks = deque(list(map(int, input().split())))
bridge = deque()
time = 0
bridge.append([trucks.popleft(), w])
while bridge or trucks:
if trucks and len(bridge) < w and sum(list(map(lambda x: x[0], bridge))) + trucks[0] <= L:
bridge.append([trucks.popleft(), w])
for b in bridge:
b[1] -= 1
if bridge[0][1] <= 0:
bridge.popleft()
time += 1
print(time+1)
결과
풀이 방법
- 현재 다리에 올라와 있는 트럭 무게의 합이 L을 넘지 않게 하면서 트럭을 다리에 추가하고 이동시켰다
- 이동시키는 것은 트럭을 다리에 추가할 때 남은 길이(w)를 추가정보로 저장하여 이동할 때마다 남은 길이를 1씩 줄여서 구현했다
- 현재 다리에 있는 트럭의 총 무게에서 트럭을 더 올릴 수 있으면 올리고, 올릴 수 없으면 현재 트럭들을 한 칸 이동만 시킨다
- 이동시킨 후 남은 길이가 0인 트럭은 다리에서 빼낸다
- 이동시킬 때마다 time을 1씩 증가시키며 총 걸리는 시간을 계산한다.
- 다리에 트럭이 없고, 다리를 건너기를 기다리는 트럭도 없으면 모든 트럭이 다리를 건넌 것이므로 답(time)을 출력한다.
- while문 탈출조건을 만족할 때 실은 마지막 트럭이 다리를 벗어나게 되므로 time+1이 정답이다