sol : 24' 41''
Learnings
- 골드5는 확실히 쉬워졌다.
#include <iostream>
#include <deque>
#define MAX_N 100
using namespace std;
int n, k;
deque<int> belt;
bool robot[MAX_N];
int lift_spot;
int drop_spot;
void Init() {
cin >> n >> k;
for (int i = 0; i < 2 * n; i++) {
int negudo;
cin >> negudo;
belt.push_back(negudo);
}
for (int i = 0; i < n; i++) {
robot[i] = false;
}
lift_spot = 0;
drop_spot = n - 1;
}
void Rotate() {
// belt rotate
int back = belt.back();
belt.pop_back();
belt.push_front(back);
// robot rotate
for (int i = drop_spot; i > 0; i--) {
if (robot[i - 1]) {
robot[i - 1] = false;
if (i != drop_spot) robot[i] = true;
}
}
}
void RobotMove() {
for (int i = drop_spot - 1; i >= lift_spot; i--) {
if (robot[i]) {
if (!robot[i + 1] && belt[i + 1] >= 1) {
robot[i] = false;
belt[i + 1]--;
if (i + 1 != drop_spot) robot[i + 1] = true;
}
}
}
}
void Lift() {
if (belt[lift_spot] != 0) {
robot[lift_spot] = true;
belt[lift_spot]--;
}
}
bool FinCheck() {
int cnt = 0;
for (int i = 0; i < belt.size(); i++) {
if (belt[i] == 0) cnt++;
}
if (cnt >= k) return true;
else return false;
}
int main() {
Init();
int turn = 0;
while (true) {
turn++;
// 1. Rotate
Rotate();
// 2. RobotMove
RobotMove();
// 3. Lift
Lift();
// 4. Fin Check
if (FinCheck()) break;
}
cout << turn;
return 0;
}