[ 문제 ] : https://www.acmicpc.net/problem/1021

 

1021번: 회전하는 큐

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

www.acmicpc.net


[ 문제 접근 ]

 

 


[ 최종 코드 ]

 

#include<iostream>
#include<algorithm>
#include<vector>
#include<deque>

using std::cout; using std::cin;
using std::vector;

int n, m, sum;
int left, right;

int getCount(std::deque<int>& deq, int val) {
	int cnt = 0;
	for (int i = 0; i < n; i++) {
		if (deq[i] == val) {
			 left = i;
			 right = deq.size() - i;
			 break;
		}
	}
	if (left < right) {
		for (int i = 0; i < left; i++) {
			deq.push_back(deq.front());
			deq.pop_front();
			cnt++;
		}
		deq.pop_front();
	}
	else {
		for (int i = 0; i < right; i++) {
			deq.push_front(deq.back());
			deq.pop_back();
			cnt++;
		}
		deq.pop_front();
	}

	return cnt;
}



int main() {
	std::ios::sync_with_stdio(false);
	cin.tie(nullptr); cout.tie(nullptr);
	std::deque<int> deq;

	cin >> n >> m;

	for (int i = 1; i <= n; i++) {
		deq.push_back(i);
	}

	while (m--) {
		int a;
		cin >> a;
		sum += getCount(deq,a);
	}
	cout << sum;
	
	return 0;

}

[ Key Point ]

 

👉 


[ 다른 사람 풀이 ]

 

ref :: https://iingang.github.io/posts/BOJ-1021/

ref :: https://cocoon1787.tistory.com/267

+ Recent posts