[백준] 13335 - 트럭
1. 문제
2. 개요
트럭들과 다리가 있다.
트럭들의 수, 각각의 무게, 다리의 최대 하중과 다리를 건너는데 걸리는 시간이 주어질 때,
모든 트럭이 순서대로 다리를 건널 때 까지의 시간을 구하는 큐 활용 문제.
3. 코드 및 추가내용
import sys
from collections import deque
n, w, L = map(int, sys.stdin.readline().split())
trucks = list(map(int, sys.stdin.readline().split()))
bridge = deque([0 for i in range(w)])
bridge_l = 0
t = 0
for truck in trucks:
while True:
bridge_l -= bridge.popleft()
if bridge_l + truck > L:
bridge.append(0)
t += 1
else:
bridge.append(truck)
bridge_l += truck
t += 1
break
print(t+w)
using System;
using System.Collections.Generic;
namespace BOJ_
{
internal class Program
{
static void Main(string[] args)
{
string[] input = Console.ReadLine().Split();
int n = int.Parse(input[0]);
int w = int.Parse(input[1]);
int L = int.Parse(input[2]);
int[] trucks = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
Queue<int> bridge = new Queue<int>(new int[w]);
int bridge_l = 0;
int t = 0;
foreach (int truck in trucks)
{
while (true)
{
bridge_l -= bridge.Dequeue();
if (bridge_l + truck > L)
{
bridge.Enqueue(0);
t++;
}
else
{
bridge.Enqueue(truck);
bridge_l += truck;
t++;
break;
}
}
}
Console.WriteLine(t+w);
}
}
}
다리의 상황을 큐로 만들어둔다.
트럭의 무게를 순서대로 탐색하며 다리의 현재 하중 + 지나야 할 트럭의 무게가 최대하중보다 크다면 다음 트럭이 올라오더라도 버틸 수 있는 하중이 될 때까지 dequeue와 enqueue(0)을 반복하고 그렇지 않다면 dequeue한 후 enqueue(truck)으로 트럭을 다리 위에 올린다.
모든 트럭에 대해 작업을 행했다면, 마지막 트럭이 다리 위에 막 올라온 상황이 되므로 현재까지 걸린 시간 + 마지막 트럭이 다리를 완전히 건널 때까지 걸리는 시간을 출력한다.
Comments