1874번 - 스택 수열
스택을 k로 표현하고, 수열을 order 배열에 집어넣어서 시뮬레이션 처럼 맞췄다.
order 배열의 해당하는 i 번 인덱스와 비교해서 작으면 k 값을 push 시켜서 맞추고 pop 시킨다.
push , pop 을 할 때에는 이미 써버린 숫자면 그냥 지나치도록 k++ 나 k-- 를 해준다.
<정답 코드>
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | #include<iostream> #include<stack> #include<vector> using namespace std; int order[100001]; bool num[100001]; int n, k; vector<char> ans; int main() { cin >> n; for (int i = 0; i < n; i++) { num[i] = false;; } for (int i = 0; i < n; i++) { cin >> order[i]; } for (int i = 0; i < n; i++) { if (order[i] > k) { ans.push_back('+'); while (true) { k++; if (!num[k]) { break; } } i -= 1; continue; } if (order[i] == k) { ans.push_back('-'); num[k] = true; while (true) { k--; if (!num[k]) { break; } } continue; } if (order[i] < k) { cout << "NO"; return 0; } } for (int i = 0; i < ans.size(); i++) { cout << ans[i] << "\n"; } return 0; } | cs |
반응형