문제접근
놓쳤던 부분
#include <iostream>
#include <deque>
#include <utility>
using namespace std;
int main(void)
{
int n;
int input;
int cur;
pair<int, int> tmp;
//종이에 적힌 번호, 풍선 번호
deque<pair<int, int> > ballon;
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> input;
ballon.push_back({input, i});
}
while (!ballon.empty())
{
cur = ballon.front().first;
cout << ballon.front().second << " ";
ballon.pop_front(); //0
if (cur > 0)
{
for (int i = 0; i < cur - 1; i++)
{
tmp = ballon.front();
ballon.push_back(tmp); //1
ballon.pop_front(); //2
}
}
if (cur < 0)
{
for (int i = 0; i > cur; i--)
{
tmp = ballon.back();
ballon.push_front(tmp); //3
ballon.pop_back();//4
}
}
}
return (0);
}
C++
복사
•
1,2번줄 순서 변경, 3,4번줄 순서 변경에 따라 코드가 메모리 초과로 출력됨
◦
ballon.pop_front()를 주석0 에서 하고 났을때 ballon이 빈 상태인데 주석2 주석4 에서 먼저 덱에 접근을 해버렸을때 undefined behavior 이기 때문에 메모리 출력이 나오는게 아닐까 추정
코드
2024 KB
0 ms
#include <iostream>
#include <deque>
#include <utility>
using namespace std;
int main(void)
{
int n;
int input;
int cur;
pair<int, int> tmp;
//종이에 적힌 번호, 풍선 번호
deque<pair<int, int> > ballon;
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> input;
ballon.push_back({input, i});
}
while (!ballon.empty())
{
cur = ballon.front().first;
cout << ballon.front().second << " ";
ballon.pop_front();
if (cur > 0)
{
for (int i = 0; i < cur - 1; i++)
{
tmp = ballon.front();
ballon.push_back(tmp);
ballon.pop_front();
}
}
if (cur < 0)
{
for (int i = 0; i > cur; i--)
{
tmp = ballon.back();
ballon.push_front(tmp);
ballon.pop_back();
}
}
}
return (0);
}
C++
복사