Koala - 15기/코딩테스트 준비 스터디

[백준/c++] 1874번: 스택 수열

nunomi0 2024. 7. 23. 16:58

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

 

문제

1이상 n(1<=n<=100,000)이하의 정수가 순서대로 주어진다. 스택에 push하는 순서는 반드시 오름차순을 지킨다고 할 때, 주어진 수열을 만들 수 있으면 연산을 출력하고, 불가능한 경우 "NO"를 출력한다.

 

풀이

스택에 직접 오름차순으로 수를 push하고 현재 인덱스 값과 스택 top이 같은 경우 pop한다. 연산 과정은 벡터에 저장한다.\

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

int n, arr[100010], idx = 1;
stack<int> s;
vector<char> v;

int main() {
	cin >> n;
	for (int i = 0; i < n; i++) cin >> arr[i];
	
	for (int i = 0; i < n; i++) {
		if (idx <= arr[i]) {
			while (idx <= arr[i]) {
				s.push(idx++);
				v.push_back('+');
			}
		}
		if (s.top() == arr[i]) {
			s.pop();
			v.push_back('-');
		}
		else {
			cout << "NO";
			return 0;
		}
	}
	for (int i = 0; i < v.size(); i++) cout << v[i] << '\n';
}