Koala - 5기/코딩테스트 준비 스터디
[BOJ/C++] 2346- 풍선 터뜨리기
jaza
2022. 2. 14. 00:24
문제
https://www.acmicpc.net/problem/2346
2346번: 풍선 터뜨리기
1번부터 N번까지 N개의 풍선이 원형으로 놓여 있고. i번 풍선의 오른쪽에는 i+1번 풍선이 있고, 왼쪽에는 i-1번 풍선이 있다. 단, 1번 풍선의 왼쪽에 N번 풍선이 있고, N번 풍선의 오른쪽에 1번 풍선
www.acmicpc.net
풀이
순서값과 풍선값의 pair를 담고있는 deque를 이용하여 풀었다.
풍선값이 양수일때에는 맨처음 풍선은 이미 사라지고 없으므로 for 조건문에서 -1을, 음수일때에는 조건문에 abs를 씌우는것을 유의하자.
코드
#include <iostream>
#include<deque>
using namespace std;
int n;
int main() {
cin >> n;
deque<pair<int,int>> a(n);
for (int i = 1; i <= n; i++) {
a[i-1] = make_pair(i, i);
cin>>a[i-1].first;
}
while (a.size() != 0) {
int front = a.front().first;
cout << a.front().second << " ";
a.pop_front();
if (a.empty()) break;
if (front > 0) {
for (int i = 0; i < front-1; i++) {
a.push_back(a.front());
a.pop_front();
}
}
else {
for (int i = 0; i < abs(front); i++) {
a.push_front(a.back());
a.pop_back();
}
}
}
}