알고리즘

[boj1874/c++] 스택 수열

IT 참다랑어 2023. 4. 27. 22:50

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

#include <iostream>
#include <vector>
#include <stack>

using namespace std;

int N, temp;

stack<int> st;
vector<int> num;
vector<char> ret;

int nidx = 0, ridx = 0;

int main() {
	ios_base::sync_with_stdio(0); cin.tie(0);
	cin >> N;
	
	for (int i = 0; i < N; i++) {
		cin >> temp;
		num.push_back(temp);
	}

	for (int i = 1; i <= N; i++) {
		st.push(i);
		ret.push_back('+');

		while (!st.empty() && st.top() == num[nidx]) {
			st.pop();
			ret.push_back('-');
			nidx++;
		}
	}

	if (!st.empty()) cout << "NO";
	else {
		while (ridx < ret.size()) {
			cout << ret[ridx++] << '\n';
		}
	}
}