티스토리 뷰
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 |