덱을 사용하는 문제임
잘못풀었는데 답은 나와서 왜 틀렸나 계속 고민했었음
내 풀이(망한 코드)
#include <iostream>
#include <deque>
using namespace std;
int main()
{
deque <int> dq;
int N; cin>>N;
int move;
int in_ballon[1001];
int idx;
for(int i=1; i<=N; i++)
{
dq.push_back(i);
cin>>in_ballon[i]; //3 2 1 -3 -1
}
while(!dq.empty())
{
int move;
idx=dq.front();
cout<<dq.front()<<" ";
dq.pop_front();
if(in_ballon[idx]>=0)
{
move=in_ballon[idx];
for(int i=0; i<move-1; i++)
{
dq.push_back(dq.front());
dq.pop_front();
}
}
else
{
move=dq.size()+in_ballon[idx];
for(int i=0; i<move-1; i++)
{
dq.push_front(dq.back());
dq.pop_back();
}
}
}
}
피드백
0. 내가 틀린 이유는 else구문에서 move=dq.size()+in_ballon[idx]; 하였기 때문이다 근데 이게 틀릴만한거인지는 잘 모르겠다
1. iter 사용할 필요 없음. (move-1 하면 되는것이었음) 애초에 iter 쓸일이 없잖니 준혁아 ^^
2. 문제 끝까지 잘읽자
3. 뭔가 애매하게 맞은듯;
4. 다른 사람들은 다 pair이란걸 썼다
다른 사람의 풀이(pair이란걸 쓴 지리는 풀이)
#include <iostream>
#include <stack>
#include <string>
using namespace std;
typedef pair<int, int> pairs;
deque<pairs> balloon_deque;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL), cout.tie(NULL);
int n, value;
cin >> n;
for (int i=0; i<n; i++) {
cin >> value;
balloon_deque.emplace_back(i+1, value);
}
while (!balloon_deque.empty()) {
pairs balloon = balloon_deque.front();
cout << balloon.first << ' ';
balloon_deque.pop_front();
// 해당 수 전까지의 다시 push
// 타겟 풍선은 pop
for (int i=1 ; i<balloon.second; i++) {
balloon_deque.push_back(balloon_deque.front());
balloon_deque.pop_front();
}
for (int i=0; i>balloon.second; i--) {
balloon_deque.push_front(balloon_deque.back());
balloon_deque.pop_back();
}
}
}
'PS 연습' 카테고리의 다른 글
[자료구조] 백준 문제 풀이 - 2075 N번째 큰 수 (0) | 2022.04.24 |
---|---|
[알고리즘] 백준 문제 풀이 - 2108 통계학 (0) | 2022.04.23 |
[자료구조] 백준 문제 풀이 - 1021 회전하는 큐 (0) | 2022.04.16 |
[자료구조] 백준 문제 풀이 - 1158 요세푸스 문제 (0) | 2022.04.10 |
[자료구조] 백준 문제 풀이 - 1406 에디터 (0) | 2022.04.09 |