[백준] 컨베이어 벨트 위의 로봇

1 minute read

문제 설명

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;
}