728x90

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

int N, M;
deque<int> dq;

int checkF(int temp){
    int count = 0;
    for(auto it=dq.begin(); it!=dq.end(); it++){
        if(*it == temp) return count;
        count++;
    }
}

int checkB(int temp){
    int count = 0;
    for(auto it=dq.end(); it!=dq.begin(); it--){
        if(*it == temp) return count;
        count++;
    }
}

int main(){
    int count = 0;
    cin >> N >> M;
    for(int i=1; i<=N; i++) dq.push_back(i);
    for(int i=0; i<M; i++){
        int temp;
        cin >> temp;

        if(temp == dq.front()) dq.pop_front();
        else if( checkF(temp) < checkB(temp) ){
            for(auto it=dq.begin(); it!=dq.end(); it++ ){
                if(temp == *it){
                    dq.pop_front();
                    break;
                } else{
                    dq.push_back(*it);
                    dq.pop_front();
                    count++;
                } 
            }
        } else {
            for(auto it=dq.begin(); it!=dq.end(); it--){
                if(temp == *it){
                    dq.pop_front();
                    break;
                } else{
                    dq.push_front(dq.back());
                    dq.pop_back();
                    count++;
                }
            }
        }
    }
    cout << count;
}

STL에서 지원해주는 Queue는 begin, end 함수가 없어서 iterator를 돌리지 못한다. Deque에는 있어서 가능하다.

그 사실을 이번 문제에서 알게 되었다.

또한 Visual Stdio Code를 사용하여 문제를 사용하고 있었는데 전역변수를 어떻게 보는지 잘 몰랐다.

Watch에 변수를 추가하여 확인가능했다. 새로운 사실!

반응형

+ Recent posts