[백준 1021번 C/C++] 회전하는 큐

 

https://www.acmicpc.net/problem/1021

 

1021번: 회전하는 큐

첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가

www.acmicpc.net


 

해결전략

 

deque

 

 

 

 


 

코드

 

#include <iostream>
#include <deque>
using namespace std;

int n, m, input, cnt=0;
deque<int> dq;

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		dq.push_back(i);
	}
	for(int i=0; i<m; i++){
		cin >> input;

		int idx;
		for(int j=0; j<dq.size(); j++)
		{
			if(dq[j]==input)
			{
				idx = j;
				break;
			}
		}

		int left = idx;
		int right = dq.size() - idx - 1;
		if(left <=right)
		{
			while (dq.front() != input)
			{
				dq.push_back(dq.front());
				dq.pop_front();
				cnt++;
			}
		}
		else
		{
			while(dq.front() != input)
			{
				dq.push_front(dq.back());
				dq.pop_back();
				cnt++;
			}
		}

		dq.pop_front();
	}

	cout << cnt << "\n";
	
	return 0;
}