October 21, 2020
덱, 시뮬레이션
이번 삼성 복기 문제이다. 컨베이어 벨트가 시계 방향으로 움직이기 때문에 덱을 이용해 풀이했다. 문제를 잘 읽고 그대로 구현하기만 하면 된다.
#include <deque>
#include <iostream>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n, k;
int zeros = 0;
deque<pair<int, bool>> dq;
cin >> n >> k;
for (int i = 0; i < n * 2; ++i) {
int a;
cin >> a;
dq.push_back({a, false});
if (a == 0) zeros++;
}
int step = 1;
while (1) {
dq.push_front(dq.back());
dq.pop_back();
if (dq[n - 1].second) dq[n - 1].second = false;
for (int i = n - 2; i >= 0; --i) {
if (dq[i].second && !dq[i + 1].second && dq[i + 1].first) {
dq[i].second = false;
dq[i + 1].second = i + 1 == n - 1 ? false : true;
if (--dq[i + 1].first == 0) zeros++;
}
}
if (dq[0].first) {
if (--dq[0].first == 0) zeros++;
dq[0].second = true;
}
if (zeros >= k) break;
step++;
}
cout << step << endl;
return 0;
}