728x90
문제 2346번
https://www.acmicpc.net/problem/2346
몇번째인지와 이동해야할 수를 pair로 해서 덱에 저장시킨다. 그리고 덱이 빌 때까지 반복해준다. 일단 맨 앞에 있는 숫자를 출력해주고 pop해준다. 해당 수의 이동해야할 수가 양수인지 음수인지 확인하여 각각 수행해준다. 앞에서 이미 출력하고 pop을 했기 때문에 오른쪽으로 한번 이동된다. 그러므로 양수라면 (원래 이동해야되는 수 - 1)번 반복해준다. 양수는 앞의 숫자를 뒤로 이동시키며 맨 앞에 다음 숫자가 오도록 만들면 되고 음수는 반대로 뒤의 숫자를 앞으로 이동시키면 다음 숫자가 맨 앞에 오도록 만든다.
#include <iostream>
#include <deque>
using namespace std;
int main() {
int n;
deque <pair<int, int>> dq;
cin >> n;
for (int i = 1; i <= n; i++) {
int num;
cin >> num;
dq.push_back({ i,num });
}
while (!dq.empty()) {
auto now = dq.front();
int memo = now.second;
cout << now.first << ' ';
dq.pop_front();
if (memo > 0) { //양수
for (int i = 0; i < memo - 1; i++) {
dq.push_back(dq.front());
dq.pop_front();
}
}
else { //음수
for (int i = 0; i < (memo * (-1)); i++) {
dq.push_front(dq.back());
dq.pop_back();
}
}
}
return 0;
}
728x90
'백준 > C++' 카테고리의 다른 글
[C++] 백준 2742번 - 기찍 N (0) | 2024.06.25 |
---|---|
[C++] 백준 11047번 - 동전 0 (0) | 2024.06.23 |
[C++] 백준 28279번 - 덱 2 (2) | 2024.06.21 |
[C++] 백준 11866번 - 요세푸스 문제 0 (0) | 2024.06.21 |
[C++] 백준 2164번 - 카드 2 (0) | 2024.06.19 |