BOJ

백준 2346 - 풍선 터뜨리기

yanJuicy 2020. 1. 25. 01:23
반응형

문제

 

https://www.acmicpc.net/problem/2346

 

2346번: 풍선 터뜨리기

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

www.acmicpc.net

 

 

풀이

 

pair와 vector를 이용해서 입력 값을 저장한다. pair에 인덱스와 움직일 숫자를 넣어서 vector에 저장을 한다. 그 다음 부터는 vector에 맨 앞에 저장되어 있는 값을 출력하고 바꿔주면 된다. 움직일 숫자가 양수이면 vector의 앞에 있는 값을 뒤로 보내주고, 음수면 vector의 뒤에 있는 값을 앞에 넣어준다.

 

1. vector의 front 값의 인덱스를 출력 후 삭제

2. front 값의 움직일 수가 양수이면 (움직일 수 - 1)만큼 다음 front 값들을 뒤로 보냄

3. front 값의 움직일 수가 음수이면 그 수만큼 back 값들을 앞으로 보냄

4. vector가 빌 때까지 1, 2, 3 반복

 

코드

 

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
42
43
44
45
#include <iostream>
#include <vector>
 
using namespace std;
 
int N;
vector<pair<int ,int>> v;
 
int main()
{
    cin.tie(0);
    ios::sync_with_stdio(0);
 
    cin >> N;
    for (int i=1, t; i<=N; i++)
    {
        cin >> t;
        v.push_back({i, t});
    }
 
    while (!v.empty())
    {
        cout << v.front().first << ' ';
        int move = v.front().second;
        v.erase(v.begin());
        if (move > 0)
        {
            for (int i=0; i<move-1; i++)
            {
                v.push_back(v.front());
                v.erase(v.begin());
            }
        }
        else
        {
            for (int i=0; i<-move; i++)
            {
                v.insert(v.begin(), v.back());
                v.pop_back();
            }
        }
    }
 
    return 0;
}
cs

 

반응형

'BOJ' 카테고리의 다른 글

백준 2004 - 조합 0의 개수  (0) 2020.02.18
백준 6588 - 골드바흐의 추측  (0) 2020.02.12
백준 1753 - 최단경로  (1) 2020.01.10
백준 1197 - 최소 스패닝 트리  (0) 2019.12.26
백준 1167 - 트리의 지름  (0) 2019.11.15