BOJ 20055 : 컨베이어 벨트 위의 로봇 - C++

김정욱·2021년 4월 10일
0

Algorithm - 문제

목록 보기
214/249

컨베이어 벨트 위의 로봇

코드

#include <cstdio>
#include <vector>
#include <queue>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <set>
#include <deque>
#include <numeric>
#include <map>
#define ll long long
using namespace std;
// 0440 ~ 0516
int N,K,ans,cnt;
int num=1;
deque<pair<int,int>> belt; // {로봇 번호, 내구도}
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    cin >> N >> K;
    for(int i=0;i<2*N;i++)
    {
        int a;
        cin >> a;
        belt.push_back({0,a});
    }
    while(true)
    {
        ans++;
        /* 벨트 회전 */
        auto tmp = belt.back(); belt.pop_back();
        belt.push_front(tmp);
        belt[0].first = 0; // 회전 전에 끝칸이니 무조건 비어있음
        /* 로봇 이동 */
        belt[N-1].first = 0;
        for(int i=N-2;i>=0;i--)
        {
            if(belt[i].first == 0) continue;
            if(belt[i+1].first == 0 and belt[i+1].second > 0){
                belt[i+1].second--;
                belt[i+1].first = belt[i].first;
                belt[i].first = 0;
            }
        }
        /* 1번에 로봇 적재 여부 */
        if(belt[0].second > 0)
        {
            belt[0].first = num++;
            belt[0].second--;
        }
        int cur_cnt = 0;
        /* 내구도가 0인 벨트 체크 */
        for(int i=0;i<2*N;i++)
            if(belt[i].second == 0) cur_cnt++;
        if(cur_cnt >= K) break;
    }
    cout << ans;
    return 0;
}
profile
Developer & PhotoGrapher

0개의 댓글