- 하나를 터뜨린 후에 해당 숫자만큼 옆으로 이동해야 하는데, 풍선을 터뜨렸기 때문에 인덱스가 조정이 된다.
- 일반적인 배열보다 큐를 사용하여 해당 갯수만큼 풍선들을 pop 과 push 처리 해주면 된다.
- 양쪽으로 빠져야 하기 때문에 덱을 사용해준다.
#include <iostream>
#include <deque>
using namespace std;
int n, temp;
deque<pair<int, int>> dq;
int main(void)
{
cin >> n;
for(int i = 0 ; i < n ; i++)
{
cin >> temp;
dq.push_back({temp, i}); // 덱에 숫자와 인덱스를 같이 넣어준다
}
while(dq.size()) // 풍선을 다 터트릴때까지
{
pair<int, int> cur = dq.front(); // 현재 풍선에 대한 정보를 가진 후
dq.pop_front(); // 풍선 터뜨림
cout << cur.second + 1 << " "; // 이번에 터뜨린 풍선에 해당하는 인덱스를 출력해줌
if(cur.first > 0) // 양수일 경우
{
for(int i = 0 ; i < cur.first-1 ; i++) // 하나를 터트렸으니 -1 해준 갯수만큼
{
dq.push_back(dq.front()); // 오른쪽 풍선들을 뒤로 옮겨줌
dq.pop_front();
}
}
else // 음수일 경우
{
for(int i = 0 ; i < -cur.first ; i++) // 왼쪽풍선들은 해당 갯수 그대로
{
dq.push_front(dq.back()); // 앞으로 이동
dq.pop_back();
}
}
}
cout << endl;
}
'PS > BOJ' 카테고리의 다른 글
[백준] 9184 : 신나는 함수 실행 (0) | 2021.01.18 |
---|---|
[백준] 7562 : 나이트의 이동 (0) | 2021.01.17 |
[백준] 1699 : 제곱수의 합 (0) | 2021.01.15 |
[백준] 11052 : 카드 구매하기 (0) | 2020.12.30 |
[백준] 1261 : 알고스팟 (0) | 2020.12.29 |