본문 바로가기

Coding Test/BOJ

[백준/Python] 13335 트럭

문제 링크

 

13335번: 트럭

입력 데이터는 표준입력을 사용한다. 입력은 두 줄로 이루어진다. 입력의 첫 번째 줄에는 세 개의 정수 n (1 ≤ n ≤ 1,000) , w (1 ≤ w ≤ 100) and L (10 ≤ L ≤ 1,000)이 주어지는데, n은 다리를 건너는 트

www.acmicpc.net

 

문제 풀이

  • 처음에는 리스트로 접근하였는데, 시간이 오래 걸릴 것 같아서 다른 방법을 생각해 보았다.
  • 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