728x90

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

 

13335번: 트럭

문제 강을 가로지르는 하나의 차선으로 된 다리가 하나 있다. 이 다리를 n 개의 트럭이 건너가려고 한다. 트럭의 순서는 바꿀 수 없으며, 트럭의 무게는 서로 같지 않을 수 있다. 다리 위에는 단��

www.acmicpc.net

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
#include <queue>
using namespace std;

int main() {
	cin.tie(NULL);
	int n, w, l;
	cin >> n >> w >> l;
	vector<int> v(n);
	queue<int> q;
	vector<int> count;
	for (int i = 0; i < n; i++) {
		cin >> v[i];
	}
	q.push(v[0]);
	count.push_back(w);
	int index = 1;
	int time = 1;
	int totalWeight = v[0];
	int weight;
	while (!q.empty()) {
		for (int i = 0; i < count.size(); i++) {
			count[i]--;
		}
		if (count[0] == 0) {
			weight = q.front();
			q.pop();
			totalWeight -= weight;
			count.erase(count.begin());
		}
		if (index < n && totalWeight + v[index] <= l) {
			q.push(v[index]);
			count.push_back(w);
			totalWeight += v[index];
			index++;
		}
		time++;
	}
	cout << time;
	return 0;
}

q라는 이름으로 큐를 하나 만들어놓고 다리에 진입한 트럭들은 큐에 집어넣었다. 그리고 큐에 들어간 트럭들의 무게들은 totalWeight에 더해주었다. 트럭이 다리에서 벗어나면 즉, 큐에서 빠지게 되면 totalWeight에서도 트럭의 무게만큼 빼주었다.

그리고 트럭이 단위시간에 단위길이만큼만 이동하기 때문에 다리에 진입한 트럭 하나마다 얼마나 더 가야하는지 남은 길이(남은 시간)를 count라는 벡터에 저장해주었다. 당연히 처음에는 다리의 길이이고 단위시간이 지날 때마다 count[i]--로 1씩 빼주었다. count[i]가 0이 되는 순간 큐에서 트럭을 빼고 count[i]도 벡터에서 제거해주었다.

728x90

'알고리즘 문제' 카테고리의 다른 글

[백준] 2668번 숫자고르기  (0) 2020.08.29
[백준] 3190번 뱀  (0) 2020.08.29
[백준] 1051번 숫자 정사각형  (0) 2020.08.16
[프로그래머스] 행렬의 곱셈  (0) 2020.08.01
[프로그래머스] 기능개발  (0) 2020.07.31

+ Recent posts