본문 바로가기

Algorithm/Implementation

(C++) - 백준(BOJ) 2346번 : 풍선 터뜨리기 답

반응형

www.acmicpc.net/problem/2346

 

2346번: 풍선 터뜨리기

첫째 줄에 자연수 N(1≤N≤1,000)이 주어진다. 다음 줄에는 차례로 각 풍선 안의 종이에 적혀 있는 수가 주어진다. 편의상 0은 적혀있지 않다고 가정하자.

www.acmicpc.net

deque을 이용하면 쉽게 풀 수 있는 문제였습니다.

 

풀이방법

 풍선을 터뜨렸을 때 만약 움직이려는 숫자가 양수라면 먼저 터뜨리고 움직인다는 점을 고려해 1을 뺀 만큼 이동시킵니다. 음수라면 해당값에 음수를 취한 값만큼 이동시키면 됩니다.

 

Code

#include <bits/stdc++.h>
using namespace std;
int n;
int moveBalloon[1001];
deque <int> balloon;
vector <int> ans;
int main(){
    cin >> n;
    for(int i = 0; i < n; i++) cin >> moveBalloon[i];
    for(int i = 1; i <= n; i++) balloon.push_back(i);

    for(int i = 0; i < n; i++){
        ans.push_back(balloon.front());
        int moving = moveBalloon[balloon.front()-1] ;
        balloon.pop_front();
        if(moving > 0){
            for(int i = 0; i < moving - 1; i++){
                balloon.push_back(balloon.front());
                balloon.pop_front();
            }
        }else{
            for(int i = 0; i < -moving; i++){
                balloon.push_front(balloon.back());
                balloon.pop_back();
            }
        }
    }
    for(int i = 0; i < ans.size(); i++) cout << ans[i] << ' ';
}