728x90
반응형
문제는 여기!
#include <bits/stdc++.h>
using namespace std;
int N, K;
int A[201];
int IN, OUT;
bool hasRobot[201];
int level = 0;
queue<int> robot;
void rotateBelt(){
IN -= 1;
OUT -= 1;
if(IN == 0) IN = 2*N;
if(OUT == 0) OUT = 2*N;
}
bool checkNaegu(){
int cnt = 0;
for(int i=1; i<=2*N; i++){
if(A[i]==0) cnt++;
}
if(cnt >= K) return false;
else return true;
}
void solve(){
while(1){
level++;
// 벨트 회전
rotateBelt();
// 로봇 이동
int size = robot.size();
for(int i=0; i<size; i++){
int front = robot.front();
int next;
robot.pop();
if(front == 2*N) next = 1;
else next = front + 1;
if(front == OUT){
hasRobot[front] = false;
} else if(A[next]>0 && !hasRobot[next]){
hasRobot[front] = false;
A[next] -= 1;
// 내구도 0인 칸이 K개 이상이면 return
if(!checkNaegu()) return;
// 다음이 OUT이 아닌경우 로봇올리기
if(next != OUT) {
hasRobot[next] = true;
robot.push(next);
}
} else {
robot.push(front);
}
}
// 로봇 올리기
if(A[IN]>0 && !hasRobot[IN]){
hasRobot[IN] = true;
A[IN] -= 1;
robot.push(IN);
}
// 내구도 0인 칸이 K개 이상이면 return
if(!checkNaegu()) return;
}
}
void input(){
cin >> N >> K;
for(int i=1; i<=2*N; i++){
cin >> A[i];
}
IN = 1; OUT = N;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
input();
solve();
cout << level;
return 0;
}
728x90
반응형
'알고리즘 > 시뮬레이션 & 구현' 카테고리의 다른 글
[백준/구현/JAVA] 14891번 톱니바퀴 (0) | 2023.05.26 |
---|---|
[백준/구현/C++] 16234번 인구 이동 (0) | 2023.04.25 |
[백준/구현/C++] 17141번 연구소2 (0) | 2023.03.13 |
[백준/구현/C++] 13335번 트럭 * (0) | 2023.03.10 |
[백준/구현/C++] 11659번 구간 합 구하기 4 (2) | 2023.02.20 |