BOJ

백준 13335 - 트럭

yanJuicy 2020. 4. 9. 18:31
반응형

문제

 

https://www.acmicpc.net/problem/13335

 

13335번: 트럭

문제 강을 가로지르는 하나의 차선으로 된 다리가 하나 있다. 이 다리를 n 개의 트럭이 건너가려고 한다. 트럭의 순서는 바꿀 수 없으며, 트럭의 무게는 서로 같지 않을 수 있다. 다리 위에는 단지 w 대의 트럭만 동시에 올라갈 수 있다. 다리의 길이는 w 단위길이(unit distance)이며, 각 트럭들은 하나의 단위시간(unit time)에 하나의 단위길이만큼만 이동할 수 있다고 가정한다. 동시에 다리 위에 올라가 있는 트럭들의 무게의 합은 다리의 최

www.acmicpc.net

 

 

풀이

 

다리를 큐로 생각을 하고 트럭이 다리에 올라가는 것을 큐에 값을 넣는 것으로 생각을 한다.

큐에 넣을 수 있는 최대 수는 w가 되고, 큐 안에 값들은 L을 넘어서면 안된다.

 

1. 큐에 전체 무게가 L을 넘어가지 않을 때까지 값을 넣고, 다음 값을 넣을 때 L을 넘게 되면 0을 대신 큐에 집어 넣는다. 

2. 그리고 큐에 w개의 값이 들어있으면 값을 1개를 빼주고 다음 값(0이나 트럭의 무게)을 결정해서 집어넣으면 된다. 

 

 

코드

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <queue>
 
using namespace std;
 
int n, w, L;
queue<int> q;
int result;
int truck[1000];
int cur_weight;
 
int main()
{
    cin.tie(0);
    ios::sync_with_stdio(0);
 
    cin >> n >> w >> L;
    
    for (int i=0; i<n; i++cin >> truck[i];
 
    for (int i=0; i<n; i++)
    {
        while (true)
        {
            if (q.size() == w)
            {
                cur_weight -= q.front();
                q.pop();
            }
            if (truck[i] + cur_weight <= L) break;
            q.push(0);
            result++;
        }
        q.push(truck[i]);
        cur_weight += truck[i];
        result++;
    }
 
    cout << result + w;
 
    return 0;
}
 
cs
반응형

'BOJ' 카테고리의 다른 글

백준 3190 - 뱀  (0) 2020.04.13
백준 1018 - 체스판 다시 칠하기  (0) 2020.04.12
백준 2447 - 별찍기 - 10  (0) 2020.04.06
백준 14503 - 로봇 청소기  (0) 2020.04.03
백준 6549 - 히스토그램에서 가장 큰 직사각형  (0) 2020.03.27