https://www.acmicpc.net/problem/20055
#include <iostream>
#include <vector>
using namespace std;
int n, k;
pair<int, int> robot[250]; //exist, value
bool FindZero() {
int count = 0;
for (int i = 0; i < 2 * n; i++) {
if (robot[i].second == 0) count++;
if (count >= k) {
return false;
}
}
return true;
}
void MoveBelt() {
pair<int, int> tmp = robot[0];
robot[0] = make_pair(0, robot[2 * n - 1].second);
for (int i = 2 * n - 1; i > 1; i--) {
robot[i].second = robot[i - 1].second;
if (i <= n - 1) {
robot[i].first = robot[i - 1].first;
}
else {
robot[i].first = 0;
}
}
robot[1] = tmp;
}
void MoveRobot() {
if (robot[n - 1].first == 1) {
robot[n - 1].first = 0;
robot[n] = make_pair(0, robot[n].second);
}
for (int i = n - 2; i >= 0; i--) {
if (robot[i].first == 1) {
if (robot[i + 1].second > 0 && robot[i + 1].first == 0) {
robot[i].first = 0;
robot[i + 1] = make_pair(1, robot[i + 1].second - 1);
}
}
}
if (robot[0].first == 0 && robot[0].second > 0) {
robot[0].first = 1;
robot[0].second -= 1;
}
}
int main(void) {
cin >> n >> k;
for (int i = 0; i < 2 * n; i++) {
int tp;
cin >> tp;
robot[i] = make_pair(0, tp);
}
int answer = 0;
while (FindZero()) {
answer++;
MoveBelt();
MoveRobot();
}
cout << answer << endl;
}
'백준 알고리즘 > 구현' 카테고리의 다른 글
파이프 옮기기 1 C++ (0) | 2021.10.13 |
---|---|
어른 상어 C++ (0) | 2021.10.13 |
마법사 상어와 파이어볼 C++ (0) | 2021.09.30 |
마법사 상어와 토네이도 C++ (0) | 2021.09.30 |
상어 초등학교 C++ (0) | 2021.09.18 |