BOJ 1021 c++ 회전하는 큐

백준 1021 cpp 회전하는 큐

 

정답률이 50%에 가까운데도 못 풀어서 자존심에 스크래치가 났던 문제.

auto e 로 duque 을 순환할 수 있다는 것만 미리 알았어도 시간 뺏기지 않았을 문제..

 

덱을 이용하면 쉽게 풀 수 있다.

target의 인덱스가 (덱의 사이즈 / 2) 보다 큰지 조사한 후에 크다면 오른쪽에서 왼쪽으로 넘기고, 아니면 왼쪽에서 오른쪽으로 넘긴다.

 

#include <bits/stdc++.h>
using namespace std;

int n, ea;
deque<int> D;

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

    cin >> n >> ea;
    for (int i = 1; i <= n; i++)
        D.push_back(i);

    int ans = 0;
    while (ea--)
    {
        int target;
        cin >> target;

        if (D.front() == target)
        {
            D.pop_front();
        }
        else
        {
            int size = D.size() / 2;
            if (D.size() % 2 == 1)
            {
                size += 1;
            }

            int idx = 0;
            for (auto e: D)
            {
                if (e == target)
                {
                    idx++;
                    break;
                }
                idx++;
            }
            if (idx <= size)
            {
                while (D.front() != target)
                {
                    int temp;
                    temp = D.front();
                    D.push_back(temp);
                    D.pop_front();
                    ans++;
                }
            }
            else 
            {
                while (D.front() != target)
                {
                    int temp;
                    temp = D.back();
                    D.push_front(temp);
                    D.pop_back();
                    ans++;
                }
            }
            D.pop_front();
        }
    }
    cout << ans;
}

'Algorithm' 카테고리의 다른 글

boj 2504 c++ 괄호의 값  (0) 2020.09.02
boj 10799 c++ 쇠막대기  (0) 2020.08.31
BOJ 2164 c++ 카드 2  (0) 2020.08.26
BOJ 18258 c++ 큐 2  (0) 2020.08.26
BOJ 6198 c++ 옥상 정원 꾸미기  (0) 2020.08.26
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기
// custom