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

윤경·2021년 8월 1일
0

Baekjoon

목록 보기
60/64

문제

코드

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

// 컨베이어 벨트 위의 로봇

int N, K;
deque<bool> dq; // 로봇
deque<int> dq2; // 내구도
int cnt=0, ans=1;

void Rotation() {
    dq.push_front(dq.back());
    dq.pop_back();
    dq[N-1] = false;    // 비우는 자리

    dq2.push_front(dq2.back());
    dq2.pop_back();

    
}

void Move() {
    for(int i=N-1; i>=0; i--) {
        // 해당 자리에 로봇이 있고 다음 자리에 로봇이 없고 내구도가 1 이상일 때
        if (dq[i] == true && dq[i + 1] == false && dq2[i + 1] > 0)
        {
            dq[i+1] = true;
            dq[i] = false;
            dq2[i+1]--;
        }
        // N-1 자리에 오면 무조건 내려야 함
        dq[N-1] = false;
    }
}

void Put() {
    // 내구도가 1 이상이며 해당 자리가 비었을 때
    if(dq2[0]>0 && dq[0]==false) {
        dq[0] = true;
        dq2[0]--;
    }
}

int main() {
    ios::sync_with_stdio(0);

    cin >> N >> K;

    int n;
    for(int i=0; i<2*N; i++) {
        cin >> n;
        dq2.push_back(n);
    }
    // N만큼 false로 초기화
    dq.assign(N, false);

    while(1) {
        Rotation();
        Move();
        Put();

        // 내구도가 0인 자리를 체크
        cnt=0;
        for(int i=0; i<2*N; i++) {
            if(dq2[i] == 0) { cnt++; }
        }
        // 내구도가 0인 자리가 K개 이상이라면 단계를 출력
        if(cnt >= K) { 
            cout << ans << '\n';
            return 0;
        }
        ans++;
    }


    return 0;
}

📌

"회전한다" 라는 말이 들어간 문제는 보통 deque로 해결하면 될 것 같다,,?

근데 이건 무슨 문제 이해하는데만 얼마가 걸린건지,,사실 내가 이해한게 맞는건지 모르겠다. 맞았으니까 맞겠지,,😨

profile
개발 바보 이사 중

0개의 댓글