[백준/C++] 1021번 회전하는 큐

2021. 3. 21. 17:06알고리즘/구현

728x90
반응형

문제: www.acmicpc.net/problem/1021

 

1021번: 회전하는 큐

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

www.acmicpc.net

 

 

문제풀이

 

덱을 순차 탐색하여 뽑아야 하는 숫자의 인덱스를 찾은 후 front에서의 거리와 back에서의 거리를 비교하여 더 적은 쪽으로 덱을 회전시킨다.

 

 

코드

#include <iostream>
#include <deque>

using namespace std;

void funcL(deque<int>& d, int num){
    while(d.front() != num){
        d.push_back(d.front());
        d.pop_front();
    }
    d.pop_front();
}

void funcR(deque<int>& d, int num){
    while(d.back() != num){
        d.push_front(d.back());
        d.pop_back();
    }
    d.pop_back();
}

int main(){
    ios::sync_with_stdio(false); cin.tie(NULL);

    int N, M;
    cin>>N>>M;

    deque<int> d;
    for(int i=1; i<=N; i++){
        d.push_back(i);
    }

        
    int num, cnt = 0;
    while(M--){
        cin>>num;

        int i=0;
        for(; i<d.size(); i++){
            if(d[i] == num)
                break;
        }
        
        if(i > d.size()-i){
            cnt += d.size()-i;
            funcR(d, num);
        }
        else{
            cnt += i;
            funcL(d, num);
        }
    }

    cout<<cnt;

    return 0;
}

 

 

결과

 

728x90
반응형

'알고리즘 > 구현' 카테고리의 다른 글

[백준/C++] 5430번 AC  (0) 2021.03.22
[백준/C++] 18258번 큐 2  (0) 2021.03.21
[백준/C++] 2493번 탑  (0) 2021.03.20
[백준/C++] 5397번 키로거  (0) 2021.03.19
[백준/C++] 1927번 최소 힙  (0) 2021.03.11