티스토리 뷰
1~n 까지의 수를 스택에 넣을 때 push , pop 을 이용해 주어진 배열을 만들수 있는지 알아보는게 문제다
1부터 차례로 넣으므로
만약 스택이 비었거나 또는 top이 현재보는 수와 같지 않다면
현재보는 수 까지 스택에 넣으면 된다
근데 만약 이 때 넣는수가 n보다 커진다면 만들수 없는 배열이 된다!!
이것만 잘 처리해준다면 쉽게 풀 수 있다..!
소스코드
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 | #include <iostream> #include <algorithm> #include <stack> #include <vector> using namespace std; int n; int arr[100010]; stack<int> st; vector<char> ans; int main() { int it = 1; scanf(" %d", &n); for (int i = 0; i < n; i++) scanf(" %d", &arr[i]); for (int i = 0; i < n; i++) { if (st.empty() || st.top() != arr[i]) { while (true) { if (it > n) { puts("NO"); return 0; } st.push(it++); ans.push_back('+'); if (st.top() == arr[i]) { st.pop(); ans.push_back('-'); break; } } } else if (st.top() == arr[i]) { st.pop(); ans.push_back('-'); } } for (int i = 0; i < ans.size(); i++) printf("%c\n", ans[i]); } | cs |
'알고리즘 > BOJ' 카테고리의 다른 글
[백준] 13333 Q-인덱스 (0) | 2018.05.14 |
---|---|
[백준] 1535 안녕 (0) | 2018.05.13 |
[백준] 1269 대칭차집합 (0) | 2018.05.13 |
[백준] 1967 트리의 지름 (0) | 2018.05.12 |
[백준] 4803 트리 (0) | 2018.05.12 |
댓글