[백준] 컨베이어 벨트 위의 로봇
문제 설명
https://www.acmicpc.net/problem/20055
제한사항
- 2 ≤ N ≤ 100
- 1 ≤ K ≤ 2N
- 1 ≤ Ai ≤ 1,000
풀이
50분
결과값이 다르게 나오는 예제가 있어서 고민을 오래했다. 컨베이어 벨트를 생각하고 문제를 푸느라 n번 위치의 로봇은 컨베이어 벨트가 움직이면서 땅으로 떨어지는 방식으로 풀이했던 것 같다. n번 위치에 로봇이 위치하자마자 없애주는 코드를 추가하여 바로 통과할 수 있었다.
코드
// 07:42 ~ 08:34
//#pragma warning (disable:4996)
#include<iostream>
#include<deque>
#include<vector>
using namespace std;
int main()
{
//freopen("input.txt", "r", stdin);
int n, k, temp;
int step = 1, cnt = 0;
vector<int> v;
deque<int> dq;
cin >> n >> k;
v.resize(n, 0);
for (int i = 0; i < 2 * n; ++i){
cin >> temp;
dq.push_back(temp);
}
while (true) {
temp = dq.back();
dq.push_front(temp);
dq.pop_back();
v.insert(v.begin(), 0);
v.pop_back();
v[n - 1] = 0;
for (int i = n - 2; i >= 0; --i) {
if (v[i] == 1 && v[i + 1] == 0 && dq[i + 1] > 0) {
--dq[i + 1];
if (dq[i + 1] == 0) ++cnt;
v[i] = 0;
v[i + 1] = 1;
}
}
if (v[0] == 0 && dq[0] > 0) {
v[0] = 1;
--dq[0];
if (dq[0] == 0) ++cnt;
}
if (cnt >= k) break;
++step;
}
cout << step;
return 0;
}