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

문제 링크

20055번: 컨베이어 벨트 위의 로봇

알고리즘

덱, 시뮬레이션

풀이

이번 삼성 복기 문제이다. 컨베이어 벨트가 시계 방향으로 움직이기 때문에 덱을 이용해 풀이했다. 문제를 잘 읽고 그대로 구현하기만 하면 된다.

코드

#include <deque>
#include <iostream>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n, k;
    int zeros = 0;
    deque<pair<int, bool>> dq;

    cin >> n >> k;
    for (int i = 0; i < n * 2; ++i) {
        int a;
        cin >> a;
        dq.push_back({a, false});
        if (a == 0) zeros++;
    }
    int step = 1;
    while (1) {
        dq.push_front(dq.back());
        dq.pop_back();
        if (dq[n - 1].second) dq[n - 1].second = false;
        for (int i = n - 2; i >= 0; --i) {
            if (dq[i].second && !dq[i + 1].second && dq[i + 1].first) {
                dq[i].second = false;
                dq[i + 1].second = i + 1 == n - 1 ? false : true;
                if (--dq[i + 1].first == 0) zeros++;
            }
        }
        if (dq[0].first) {
            if (--dq[0].first == 0) zeros++;
            dq[0].second = true;
        }
        if (zeros >= k) break;
        step++;
    }
    cout << step << endl;
    return 0;
}

Written by@WOOJIN
自强不息,厚德载物

GitHub