티스토리 뷰

Algorithm/BOJ

1021 회전하는 큐

henry1214 2018. 2. 11. 21:13

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



덱(Double Ended Queue)을 이용한 구현 문제이다. 매 단계마다 왼쪽으로 밀면서 빼는것과 오른쪽으로 밀면서 빼는 것 중에 연산을 더 적게 쓰는 것을 사용한다. 구현할 때 index 범위와 사용에 주의하자. 헷갈리지 않게 index 시작을 0으로 다 맞춰주는 것도 한 방법이다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <cstdio>
#include <deque>
using namespace std;
 
int main()
{
    int n,m,t,cnt=0;
    scanf("%d %d",&n,&m);
    deque<int> dq(n);
    for(int i=0;i<n;i++) dq[i]=i;
    while(m--)
    {
        scanf("%d",&t);
        t--;
        for(int i=0;i<n;i++)
        {
            if(dq[i]==t)
            {
                if(i<=n/2)
                {
                    for(int j=0;j<i;j++)
                        dq.push_back(dq.front()),dq.pop_front();
                    dq.pop_front();
                    cnt+=i,n--;
                }
                else
                {
                    for(int j=0;j<n-i;j++)
                        dq.push_front(dq.back()),dq.pop_back();
                    dq.pop_front();
                    cnt+=n-i,n--;
                }
            }
        }
    }
    printf("%d\n",cnt);
    return 0;
}
cs


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

2447 별찍기 - 10  (0) 2018.02.11
1913 달팽이  (0) 2018.02.11
2448 별찍기 - 11  (0) 2018.02.11
1914 하노이 탑  (0) 2018.02.09
9020 골드바흐의 추측  (0) 2018.02.09
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday