※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 13335번 문제인 트럭이다.

문제는 아래 링크를 확인하자.

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

 

13335번: 트럭

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

www.acmicpc.net

다리에 트럭이 순서대로 들어가고 나오므로, 다리에 진입할 트럭과 다리를 큐로 관리하면 문제의 상황을 간단히 시뮬레이션할 수 있다.

 

문제의 제한이 작아 시간 내로 모든 시뮬레이션을 마칠 수 있다는 것을 관찰하자.

 

아래는 제출한 소스코드이다.

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

struct truck {
	int time_entered, weight;
	truck(int t, int w) {
		this->time_entered = t, this->weight = w;
	}
};

queue<truck> bridge;
queue<int> waiting;


int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	int N, L, W; cin >> N >> L >> W;
	while (N--) {
		int x; cin >> x;
		waiting.push(x);
	}

	int total = 0;
	int T = 0;
	while (!bridge.empty() || !waiting.empty()) {
		if (!bridge.empty()) {
			if (bridge.front().time_entered + L == T) {
				total -= bridge.front().weight;
				bridge.pop();
			}
		}
		if (!waiting.empty()) {
			if (total + waiting.front() <= W) {
				bridge.push(truck(T, waiting.front()));
				total += waiting.front();
				waiting.pop();
			}
		}
		T++;
	}

	cout << T;
}
728x90

+ Recent posts