Algorithm/BOJ
[백준 알고리즘/C++/스택] 1874 스택 수열
pinevienna
2021. 4. 24. 21:02
문제 해석이 문제인 문제^^..
1부터 n까지의 수를 적절히 push, pop 하여 입력값과 같은 수열을 만들 수 있는지 체크하는 문제
만약 된다면 push는 +, pop은 -로 표현하여 출력하고 안되면 NO를 출력한다
stack.empty()가 true면 push, false면 stack.top()이 입력값과 같은지 체크한다
같지 않으면 같아질 때 까지 +1 해가며 push하고
같아지면 pop 해주면 됨
push, pop 할 때 +, -를 string으로 이어붙여서 마지막에 하나씩 출력하면 된다
마지막에 스택이 비어있지 않다면 NO를 출력한다!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include <iostream> #include <stack> using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, input, cur = 1; stack<int> s; string res; cin >> n; for (int i = 0; i < n; i++) { cin >> input; if (s.empty()) { s.push(cur++); res += "+"; } while (s.top() != input) { if (cur > n) break; s.push(cur++); res += "+"; } if (s.top() == input) { s.pop(); res += "-"; } } if (s.empty()) { for (int i = 0; i < res.size(); i++) { cout << res[i] << "\n"; } } else cout << "NO"; } | cs |