본문 바로가기
백준

[백준 1874] 스택 수열, C++

by 황인태(intaehwang) 2020. 1. 8.
반응형

https://www.acmicpc.net/problem/1874

 

1874번: 스택 수열

1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.

www.acmicpc.net

 본 문제는 stack을 잘 사용할 수 있는지 물어보는 문제다. 예를 들어 stack이 empty인데 stack top, pop을 하는 경우를 생각해야 한다. 그것만 잘 고려한다면 쉽게 문제를 풀 수 있다. 그래서 그냥 모든 경우에 stack이 empty가 아닐 경우를 추가했다. 그 외 문제들은 스택 수열 FAQ를 참고하길 바란다. 입력의 개수가 100,000이므로 O(n)으로 문제를 풀어야 한다.

  1. 입력된 숫자보다 stack top의 숫자가 작을 경우 push
  2. 같으면 pop
  3. stack top이 입력된 숫자보다 클 경우 NO
  4. ※ stack empty를 주의할 것
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
#include <cstdio>
#include <stack>
#include <vector>
 
using namespace std;
 
int main() {
    int t, index = 1;
    scanf("%d"&t);
    stack<int> st;
    vector<char> v;
    while (t--) {
        int num;
        scanf("%d"&num);
        if (st.empty()) {
            st.push(index);
            index += 1;
            v.push_back('+');
        }
        if (!st.empty() && st.top() > num) {
            printf("NO");
            return 0;
        }
        while (!st.empty() && st.top() < num) {
            st.push(index);
            index += 1;
            v.push_back('+');
        }
        if (!st.empty() && st.top() == num) {
            st.pop();
            v.push_back('-');
        }
    }
    for (int i = 0; i < v.size(); i++) {
        printf("%c\n", v[i]);
    }
    return 0;
}
cs
반응형

'백준' 카테고리의 다른 글

[백준 1158] 요세푸스 문제, C++  (0) 2020.01.08
[백준 1406] 에디터, C++  (0) 2020.01.08
[백준 9012] 괄호, C++  (0) 2020.01.08
[백준 9093] 단어 뒤집기, C++  (0) 2020.01.08
[백준 10828] 스택, C++  (0) 2020.01.08
Buy me a coffeeBuy me a coffee

댓글