<< 문제 >>
https://www.acmicpc.net/problem/2346
풍선을 터뜨린 후 나온 쪽지에 적힌 수 만큼 이동해서 또 터뜨리는 문제
이 문제는 deque(deck)을 이용해 해결하면 된다.
`
text 3 2 1 -3 -1
초기 : 1 2 3 4 5
1차 : 4 5 2 3 다음에 4를 터뜨림
2차 : 2 3 5 다음에 5를 터뜨림
3차 : 2 3 다음에 3을 터뜨림
4차 : 2
이런 형태로 뒤로 돌리고 앞으로 다시 돌리고 하면서 문제를 해결할 수 있다.
<< 코드 >>
#include <deque>
#include <iostream>
using namespace std;
void teskDq(int *textList, deque<int> &dq) {
int target = 1;
dq.pop_front();
cout << target << ' ';
int text;
while(!dq.empty()){
text = textList[target];
if(text > 0){
for(int i=1; i < text; i++){
dq.push_back(dq.front());
dq.pop_front();
}
target = dq.front();
dq.pop_front();
}
else{
text *= -1;
for(int i=1; i < text; i++){
dq.push_front(dq.back());
dq.pop_back();
}
target = dq.back();
dq.pop_back();
}
cout << target << ' ';
}
}
int main() {
deque<int> dq;
int num;
cin >> num;
int *textList = new int[num+1];
for (int i = 1; i <= num; i++) {
int text;
cin >> text;
textList[i] = text;
dq.push_back(i);
}
teskDq(textList, dq);
delete[] textList;
}
<< GitHub>>
< 백준 BaekJoon : 1037번 약수 > C++ (0) | 2024.01.24 |
---|---|
< 백준 BaekJoon : 24511번 queuestack> C++ (0) | 2024.01.23 |
< 백준 BaekJoon : 28279번 덱 2> C++ (0) | 2024.01.23 |
< 백준 BaekJoon : 11866번 요세푸스 문제 0> C++ (0) | 2024.01.23 |
< 백준 BaekJoon : 2164번 카드 2> C++ (0) | 2024.01.23 |
댓글 영역