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 |