article thumbnail image
Published 2021. 9. 28. 00:10

문제 설명

문제 링크

http://icpc.me/1021

 

1021번: 회전하는 큐

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

www.acmicpc.net

풀이

덱을 이용하여 풀 수 있다.

덱에서 뽑을 수의 위치를 찾아서 그 위치가 덱의 중간지점보다 오른쪽에 있다면 3번을 덱의 첫 번째에 원하는 수가 위치할 때까지 반복하고, 중간지점보다 왼쪽에 있다면 2번을 첫 번째에 원하는 수가 위치할 때까지 반복한다.

코드

#include <cstdio>
#include <deque>
#include <algorithm>

using namespace std;

int main() {
    deque<int> dq;
    int n, m; scanf("%d %d", &n, &m);
    for (int i = 1; i <= n; i++) {
        dq.push_back(i);
    }
    int ans = 0;
    while (m--) {
        int k; scanf("%d", &k);
        for (int i = 0; i < dq.size(); i++) {
            if (dq[i] == k) {
                if (i > dq.size() / 2) {
                    while (dq.front() != k) {
                        dq.push_front(dq.back());
                        dq.pop_back();
                        ans++;
                    }
                    dq.pop_front();
                } else {
                    while (dq.front() != k) {
                        dq.push_back(dq.front());
                        dq.pop_front();
                        ans++;
                    }
                    dq.pop_front();
                }
                break;
            }
        }
    }
    printf("%d", ans);
}

'Algorithm > BOJ' 카테고리의 다른 글

백준[1120] 문자열  (0) 2021.09.29
백준[19951] 태상이의 훈련소 생활  (0) 2021.09.28
백준[9663] N-Queen  (0) 2021.09.25
백준[1657] 두부장수 장홍준  (0) 2021.09.10
백준[1648] 격자판 채우기  (0) 2021.09.10
복사했습니다!