본문 바로가기
문제 풀이/백준(BOJ)

[C++] 백준 2346번 : 풍선 터뜨리기

by 희조당 2021. 10. 4.
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();
			}
		}
	}
}

댓글