본문 바로가기
PS/BOJ

[백준] 1021. 회전하는 큐(c++)

by backend 개발자 지망생 2025. 2. 5.

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

생각을 분해하는 것이 중요했던 것 같다.

각 입력값에 따른 인덱스를 특정하는 것이 포인트였다.

 


#include <iostream>
#include <cstdio>
#include <algorithm> 
#include <vector>
#include <string>
#include <map>
#include <limits.h>
#include <queue>
#include <set>
#include <math.h>
#include <stack>
#include <deque>

using namespace std;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);

	deque<int> dq;

	int n, m;

	int answer = 0;
	
	cin >> n >> m;

	// 자연수 입력
	for (int i = 1; i <= n; i++) {
		dq.push_back(i);
	}

	int input = 0;

	int left = 0, right = 0;

	while (m--) {
		// 뽑을 수 입력 받기
		cin >> input;

		// deque size만큼 순회하여 값을 가진 인덱스 특정하기
		for (int i = 0; i < dq.size(); i++) {
			// 왼쪽, 오른쪽으로 움직이는 개수 저장
			if (dq[i] == input) {
				left = i; // i 이전 인덱스만 빼주면 되니까 i번
				right = dq.size() - i; // 한번 더 연산하는 것 생각하면 dp.size()- i
				break;
			}
		}

		//어느쪽으로 빼줄지 생각
		if (left >= right) {
			// 옮겨주기
			for (int i = 0; i < right; i++) {
				dq.push_front(dq.back());
				dq.pop_back();
			}
			answer += right;

		}
		else {
			for (int i = 0; i < left; i++) {
				dq.push_back(dq.front());
				dq.pop_front();
			}
			answer += left;

		}

		dq.pop_front();
	}

	cout << answer;

	return 0;
}

 

'PS > BOJ' 카테고리의 다른 글

[백준] 11003. 최솟값 찾기(c++)  (0) 2025.02.05
[백준] 5430. AC(c++)  (0) 2025.02.05
[백준] 10866. 덱(c++)  (0) 2025.02.05
[백준] 2164. 카드2(c++)  (0) 2025.02.04
[백준] 18258. 큐 2(c++)  (0) 2025.02.04