백준 2346번: 풍선 터뜨리기 (C++)
2023. 1. 21. 02:44ㆍ알고리즘/자료구조

https://www.acmicpc.net/problem/2346
2346번: 풍선 터뜨리기
1번부터 N번까지 N개의 풍선이 원형으로 놓여 있고. i번 풍선의 오른쪽에는 i+1번 풍선이 있고, 왼쪽에는 i-1번 풍선이 있다. 단, 1번 풍선의 왼쪽에 N번 풍선이 있고, N번 풍선의 오른쪽에 1번 풍선
www.acmicpc.net
풀이
직접 구상하진 않고 친구에게 들은 방식으로 구현했다.
덱 자료구조를 사용해서 원형 큐 처럼 구현하면 된다고 들었다.
우선, 가장 앞에 있는 풍선의 값만큼 이동한다.
그 값이 양수라면, 앞에 있는 것들을 뒤로 붙여주고
음수라면 뒤에있는 것들을 앞에 붙인다.
즉, 양수일 때 -> push_back(front()) -> pop_front()
음수일 때 -> push_front(back()) -> pop_back()
전체 코드
#include <iostream>
#include <deque>
#include <cmath>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int N;
deque<pair<int, int>> deq;
cin >> N;
for (int i = 0; i < N; i++) {
int a;
cin >> a;
deq.push_back({ a, i + 1 });
}
for (int i = 0; i < N - 1; i++) {
cout << deq.front().second << ' ';
int tmp = deq.front().first;
if (tmp > 0) {
deq.pop_front();
for (int j = 0; j < tmp - 1; j++) {
deq.push_back(deq.front());
deq.pop_front();
}
}
else {
deq.pop_front();
for (int j = 0; j < abs(tmp); j++) {
deq.push_front(deq.back());
deq.pop_back();
}
}
}
cout << deq.front().second << ' ';
}
'알고리즘 > 자료구조' 카테고리의 다른 글
백준 1764번: 듣보잡 (C++) (0) | 2023.01.16 |
---|