Search
Duplicate
📗

풍선 떠뜨리기

주차
문제번호
2346
언어
C++
티어
실버
유형
자료구조
nj_Blog
nj_상태
이해도
100%
풀이
사람
이해도 2
13 more properties

문제접근

놓쳤던 부분

#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++
복사