[백준/C++] 1021번 회전하는 큐
2021. 3. 21. 17:06ㆍ알고리즘/구현
728x90
반응형
문제: www.acmicpc.net/problem/1021
1021번: 회전하는 큐
첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가
www.acmicpc.net
문제풀이
덱을 순차 탐색하여 뽑아야 하는 숫자의 인덱스를 찾은 후 front에서의 거리와 back에서의 거리를 비교하여 더 적은 쪽으로 덱을 회전시킨다.
코드
#include <iostream>
#include <deque>
using namespace std;
void funcL(deque<int>& d, int num){
while(d.front() != num){
d.push_back(d.front());
d.pop_front();
}
d.pop_front();
}
void funcR(deque<int>& d, int num){
while(d.back() != num){
d.push_front(d.back());
d.pop_back();
}
d.pop_back();
}
int main(){
ios::sync_with_stdio(false); cin.tie(NULL);
int N, M;
cin>>N>>M;
deque<int> d;
for(int i=1; i<=N; i++){
d.push_back(i);
}
int num, cnt = 0;
while(M--){
cin>>num;
int i=0;
for(; i<d.size(); i++){
if(d[i] == num)
break;
}
if(i > d.size()-i){
cnt += d.size()-i;
funcR(d, num);
}
else{
cnt += i;
funcL(d, num);
}
}
cout<<cnt;
return 0;
}
결과
728x90
반응형
'알고리즘 > 구현' 카테고리의 다른 글
[백준/C++] 5430번 AC (0) | 2021.03.22 |
---|---|
[백준/C++] 18258번 큐 2 (0) | 2021.03.21 |
[백준/C++] 2493번 탑 (0) | 2021.03.20 |
[백준/C++] 5397번 키로거 (0) | 2021.03.19 |
[백준/C++] 1927번 최소 힙 (0) | 2021.03.11 |