https://www.acmicpc.net/problem/1021
1021번: 회전하는 큐
첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가
www.acmicpc.net
#include<bits/stdc++.h>
using namespace std;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
deque<int> dq;
queue<int>q;
int n, m;
int index=0;
int cnt=0;
cin >> n >> m;
for (int i = 0; i < n; i++) {
dq.push_back(i + 1);
}
for (int i = 0; i < m; i++) {
int t;
cin >> t;
q.push(t);
}
while (!q.empty()) {
for (int i = 0; i < dq.size(); i++) { //찾고자 하는 원소가 덱에 어디에 있는지 판별
if (q.front() == dq[i]) {
index = i;
break;
}
}
if (index <= dq.size() / 2) { //앞쪽에 있을떄 2번연산
while (1) {
if (q.front() == dq.front()) { //같다면 덱과 큐를 지워준다.
dq.pop_front();
q.pop();
break;
}
else { //다르다면 앞에있으니 앞쪽을 뒤로 보낸다.
dq.emplace_back(dq.front());
dq.pop_front();
cnt++;
}
}
}
else { //뒤쪽에 있을떄 3번연산
while (1) {
if (q.front() == dq.back()) { //같다면 덱과 큐를 지워준다.
dq.pop_back();
q.pop();
break;
}
else { //다르다면 뒤에있으니 뒤쪽을 앞으로 보낸다.
dq.emplace_front(dq.back());
dq.pop_back();
cnt++;
}
}
}
}
cout << cnt;
}