본문 바로가기

problem solving

1021번: 회전하는 큐

데크를 이용해 간단하게 풀 수 있다.

#include <iostream>
#include <deque>
#include <vector>
#include <algorithm>
 
 
int main(void) {
    int len, N;
    std::cin >> len >> N;
 
    std::vector<int> val(N);
    for (int i = 0; i < N; i++) {
        std::cin >> val[i];
    }
    
    std::deque<int> mDeque;
    for (int i = 0; i < len; i++) {
        mDeque.push_back(i + 1);
    }
 
    int cur = 0;
    int count = 0;
    while (val.size() > cur) {
        int pos;
        for (int i = 0; i < len; i++) {
            if (mDeque[i] == val[cur]) {
                pos = i;
                break;
            }
        }
 
        if (pos > len / 2) {
            //뒤로 밀기
            while (mDeque.front() != val[cur]) {
                int back = mDeque.back();
                mDeque.pop_back();
                mDeque.push_front(back);
                count++;
            }
            mDeque.pop_front();
 
            len--;
            cur++;
        }
        else {
            //앞으로 밀기
            while (mDeque.front() != val[cur]) {
                int front = mDeque.front();
                mDeque.pop_front();
                mDeque.push_back(front);
                count++;
            }
            mDeque.pop_front();
            len--;
            cur++;
        }
 
    }
 
    std::cout << count << "\n";
    return 0;
}
cs

'problem solving' 카테고리의 다른 글

1208번: 부분수열의 합2  (0) 2020.02.20
1182번: 부분수열의 합  (0) 2020.02.20
1168번: 요세푸스 문제2  (0) 2020.02.19
1167번: 트리의 지름  (0) 2020.02.19
1149번: RGB거리  (0) 2020.02.19