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


코드
#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;
}
📌
#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로 해결하면 될 것 같다,,?
근데 이건 무슨 문제 이해하는데만 얼마가 걸린건지,,사실 내가 이해한게 맞는건지 모르겠다. 맞았으니까 맞겠지,,😨
Author And Source
이 문제에 관하여([백준] 20055 컨베이어 벨트 위의 로봇 C++), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dbsrud11/백준-20055-컨베이어-벨트-위의-로봇-C저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)