Tech/Algorithm
[BOJ] 백준 1021 회전하는 큐 c++ (deque)
0m1n
2023. 7. 5. 13:53
728x90
반응형
문제 출처 : https://www.acmicpc.net/problem/1021
1021번: 회전하는 큐
첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가
www.acmicpc.net
풀이
이 문제는 덱을 사용하는 문제이다.
2번 방법(왼쪽으로), 3번 방법(오른쪽으로) 중 짧은 거리를 구해서 해당 방법대로 push, pop을 반복한다.
이때 주의할 점은, left < right 인 경우 이동횟수가 +1이므로 최종 cnt에 1을 더해주어야 한다.
코드
#include <iostream>
#include <deque>
#include <algorithm>
using namespace std;
int N, M;
int ans;
int main() {
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> N >> M;
deque<int> dq;
int left, right;
int cnt = 0;
for(int i = 1; i <= N; i++)
dq.push_back(i);
while(M--) {
int num;
cin >> num;
for(int i = 0; i < dq.size(); i++) {
if(dq[i] == num) {
left = i;
right = dq.size() - i;
break;
}
}
if(left <= right) {
while(1) {
if(dq.front() == num)
break;
dq.push_back(dq.front());
dq.pop_front();
cnt++;
}
dq.pop_front();
}
else {
cnt++;
while(1) {
if(dq.back() == num)
break;
dq.push_front(dq.back());
dq.pop_back();
cnt++;
}
dq.pop_back();
}
}
cout << cnt << '\n';
return 0;
}
728x90
반응형