문제 풀이/백준(BOJ)
[C++] 백준 2346번 : 풍선 터뜨리기
희조당
2021. 10. 4. 22:11
728x90
https://www.acmicpc.net/problem/2346
2346번: 풍선 터뜨리기
1번부터 N번까지 N개의 풍선이 원형으로 놓여 있고. i번 풍선의 오른쪽에는 i+1번 풍선이 있고, 왼쪽에는 i-1번 풍선이 있다. 단, 1번 풍선의 왼쪽에 N번 풍선이 있고, N번 풍선의 오른쪽에 1번 풍선
www.acmicpc.net
문제 풀이
덱에 숫자와 인덱스를 pair로 저장한다.
덱의 제일 첫 번째 값을 pop 하는데 숫자 따로 저장한다.
숫자가 양수라면 pop을 먼저하기 때문에 숫자-1 만큼 오른쪽으로 회전시킨다.
반대로 음수라면 숫자만큼 왼쪽으로 회전시키면 된다.
느낀 점
그렇게 어렵지 않은 덱 문제였다. 다르게 구현해볼까 하다가 그냥 빨리 풀었다.
코드
#include <iostream>
#include <utility>
#include <deque>
using namespace std;
int n;
deque<pair<int, int>> dq;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for (int i = 0; i < n;i++) {
int tmp;
cin >> tmp;
dq.push_back(make_pair(tmp, i+1));
}
while (true) {
int cnt = dq.front().first;
cout << dq.front().second << " ";
dq.pop_front();
if (dq.empty()) break;
if (cnt > 0) {
for (int i = 0; i < cnt - 1;i++) {
dq.push_back(dq.front());
dq.pop_front();
}
}
else {
for (int i = cnt; i < 0;i++) {
dq.push_front(dq.back());
dq.pop_back();
}
}
}
}