문제 링크
문제 풀이
- 처음에는 리스트로 접근하였는데, 시간이 오래 걸릴 것 같아서 다른 방법을 생각해 보았다.
- w의 개수만큼 0이 들어 있는 큐(다리의 길이)를 생성하고, 왼쪽의 큐를 하나 제거하고(popleft) a[i] 만큼의 무게를 가진 트럭을 오른쪽에서 하나씩 집어 넣으면서(append) 큐의 길이를 일정하게 유지하여 한 칸씩 이동하는 모습을 구현해 보았다.
- 이때, 현재 큐(다리 위)에 있는 총량과 새로 넣을 트럭의 무게 합이 l보다 작거나 같으면 큐에 넣고(append), 그렇지 않으면 0을 넣도록 하였다.
- 마지막 트럭이 다리를 건널때까지 반복해서 수행해야 하므로, 다리를 건넌 트럭의 개수(count)를 카운트하여 n과 같아질 때까지 수행하도록 하였다.
전체 코드
import sys
from collections import deque
n, w, l = map(int, sys.stdin.readline().split())
a = deque(map(int, sys.stdin.readline().split()))
d = deque([0] * w) # 다리 길이
count = 0 # 다리를 건넌 트럭의 개수
res = 0
while count < n:
k = d.popleft()
# 도착한 트럭이 있다면 카운트
if k != 0:
count += 1
# 트럭이 모두 다리 위를 건넜거나 건너는 중일 경우
if len(a) > 0:
if sum(d) + a[0] <= l:
t = a.popleft()
d.append(t)
else:
d.append(0)
# 한 칸 이동한 경우 카운트
res += 1
print(res)
반응형
'Coding Test > BOJ' 카테고리의 다른 글
[백준/Python] 10026 적록색약 (0) | 2024.02.15 |
---|---|
[백준/Python] 12904 A와 B (2) | 2024.02.14 |
[백준/Python] 2565 전깃줄 (2) | 2024.02.13 |
[백준/Python] 2512 예산 (0) | 2024.02.10 |
[백준/Python] 7576 토마토 (0) | 2024.02.09 |