본문 바로가기

백준/C++

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

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  (1) 2024.06.21
[C++] 백준 11866번 - 요세푸스 문제 0  (0) 2024.06.21
[C++] 백준 2164번 - 카드 2  (0) 2024.06.19