공부 일지/알고리즘

[덱]BOJ 1021번 - 회전하는 큐

Roble 2023. 12. 28. 00:17

https://www.acmicpc.net/problem/1021

 

1021번: 회전하는 큐

첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가

www.acmicpc.net

 

 

 

#include <bits/stdc++.h>
using namespace std;
int main(void){
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n, m;
    cin >> n >> m;        //1)n,m 입력받기
    deque<int> DQ;
    for(int i=1; i <= n; i++) DQ.push_back(i);    //2)n크기의 덱 만들기
    int cnt=0;
    while(m--){    //3)m만큼 반복
        int val;
        cin >> val;
        int idx = find(DQ.begin(), DQ.end(), val) - DQ.begin();
        while(DQ.front() != val){    //4)찾을 값이 front자리로 올때까지 반복
            if(idx < DQ.size()-idx){	//5)찾을 값의 자리가 front로 오도록 만들기
                DQ.push_back(DQ.front());
                DQ.pop_front();
            }
            else{
                DQ.push_front(DQ.back());
                DQ.pop_back();
            }
            cnt++;    //6)과정횟수 카운트하기
        }
        DQ.pop_front();    //7)찾은 값 제거하기
    }
    cout << cnt;    //8)카운트한 횟 수 출력하기
}