[백준 알고리즘]/[C++]

2346번 풍선 터뜨리기 | Baekjoon BOJ 백준 2346 C++ 코드, 해설, 풀이

말하는펭귄 2021. 1. 17. 12:17
728x90
반응형

 

 

이번 포스팅은 백준 2346번 풍선 터뜨리기입니다.

아래 url를 클릭하시면 백준 사이트에서 문제를 볼 수 있습니다.

www.acmicpc.net/problem/2346

 

2346번: 풍선 터뜨리기

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

www.acmicpc.net

 

 

 

기본 알고리즘

vector의 삽입과 삭제

pair 사용

 

참고

line25
마지막 풍선을 터뜨린 후 더 이상 풍선 터뜨리기를 하지 않음 = main 함수 종료 (return 0)

line 27-32
오른쪽 이동 = 맨 앞 원소 삭제 후 맨 뒤에 삽입

line 33-38
왼쪽 이동 = 맨 뒤 원소 삭제 후 맨 앞에 삽입

line 34
abs(num)
int형 변수 num의 절대값 반환 함수

 

 

 

전체 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//백준2346 풍선 터뜨리기
 
#include <iostream>
#include <utility>
#include <vector>
using namespace std;
 
int main() {
    int N;
    cin >> N;
 
    vector<pair<intint>> v;
 
    for (int i = 1; i <= N; i++) {
        int get;
        cin >> get;
        v.push_back(make_pair(i, get));
    }
 
    while (!v.empty()) {
        cout << v.front().first << " ";
        int num = v.front().second;
        v.erase(v.begin());
 
        if (v.empty()) return 0;
 
        if (num > 0) {
            for (int i = 0; i < num-1; i++) {
                v.push_back(v.front());
                v.erase(v.begin());
            }
        }
        else {
            for (int i = 0; i < abs(num); i++) {
                v.insert(v.begin(), v.back());
                v.erase(v.end()-1);
            }
        }
    }
 
}
cs

 

 

 

 

728x90
반응형