문제 출처: https://www.acmicpc.net/problem/13335
Silver 1
시도 1. 큐없이 그냥 idx를 두고 무게 +-를 쟀더니 다리를 건너는 시간 체크도 어렵고 답이 안나옴.
시도 2. 큐를 가지고 접근. 사이즈가 차면 = 다리 건너는 시간인 걸 이용해 덧셈과 뺼셈이 유용하다.
#include <iostream>
#include <algorithm>
#include <queue>
#define INF 987654321
using namespace std;
int arr[1001];
int main() {
int n, w, l;
cin >> n >> w >> l;
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
queue<int> q;
int time = 0, total = 0;
for (int i = 0; i < n; i++) {
while (1) {
if (q.size() == w) {
total -= q.front();
q.pop();
}
if (total + arr[i] <= l) break;
q.push(0);
time++;
}
q.push(arr[i]);
total += arr[i];
time++;
}
cout << time + w << "\n";
return 0;
}