1874 - 스택 수열

solution

#include <iostream>
#include <stack>
using namespace std;

int main()
{
    int stack_size;
    cin >> stack_size;
    int * elem = new int[stack_size];
    for(int i = 0; i < stack_size; i++)
        cin >> elem[i];

    int previous_inserted_elem = 0;
    int elem_cnt = 0;
    int prev_elem = 0;
    stack<int> stack;
    char * print_arr = new char[stack_size*2];
    int arr_idx = 0;

    while(elem_cnt < stack_size)
    {
        if(stack.empty())
        {
            for(int i = previous_inserted_elem+1; i <= elem[elem_cnt]; i++)
            {
                stack.push(i);
                print_arr[arr_idx++] = '+';
                previous_inserted_elem = i;
            }
        }
        if(stack.top() == elem[elem_cnt])
        {
            stack.pop();
            print_arr[arr_idx++] = '-';
            elem_cnt++;
        }
        else if(stack.top() < elem[elem_cnt])
        {
            if(previous_inserted_elem < elem[elem_cnt])
            {
                for(int i = previous_inserted_elem+1; i <= elem[elem_cnt]; i++)
                {
                    stack.push(i);
                    print_arr[arr_idx++] = '+';
                    previous_inserted_elem = i;
                }
            }
            else
            {
                break;
            }
        }
        else break;
    }

    if(arr_idx == stack_size*2)
        for(int i = 0; i < arr_idx; i++)
            cout << print_arr[i] << '\n';
    else
        cout << "NO" << endl;

    return 0;
}

ref

1874번: 스택 수열