카테고리 없음
[c/c++] BOJ 1021번 문제 - 회전하는 큐
wonjun.Aden
2022. 3. 7. 23:28
https://www.acmicpc.net/problem/1021
1021번: 회전하는 큐
첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가
www.acmicpc.net
문제

문제풀이
#include <bits/stdc++.h>
using namespace std;
//회전하는 큐
// 큐에 처음에 포함되어 있던 수 N이 주어짐.
//지민이가 뽑아내려고 하는 원소의 위치 주어짐.
//원소를 주어진 순서대로 뽑아내는데 드는 2,3번 연산의 최솟값을 출력하시오.
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int n,m;
int count=0;
int idx;
int input;
deque<int> dq;
//큐의 크기 n , 뽑아내려고 하는 수의 개수 M
cin >> n >> m;
for(int i=1;i<=n;i++){
dq.push_back(i);
}
/* for(auto c : dq){
cout << c << '\n';
} */
for(int i=0;i<m;i++){
cin >> input;
for(int j=0;j<dq.size();j++){
if(dq[j] == input){
idx=j;
//cout << idx << '\n';
break;
}
}
if(idx < (dq.size()-idx)){
while(true){
if(dq.front() == input){
dq.pop_front();
break;
}
dq.push_back(dq.front());
dq.pop_front();
count++;
}
}else{
while(true){
if(dq.front() == input){
dq.pop_front();
break;
}
dq.push_front(dq.back());
dq.pop_back();
count++;
}
}
}
cout << count <<'\n';
return 0;
}
문제의 포인트
- idx의 위치가 왼쪽보다 오른쪽이 크면 앞쪽에 있다는 뜻이기 때문에 앞을 pop해주고 횟수를 증가 시켜줌
- idx의 위치가 오른쪽보다 왼쪽이 크면 뒷쪽에 있다는 뜻이기 때문에 뒤를 pop해주고 횟수를 증가 시켜줌
반응형