4 분 소요

🗒️ 1874번) 스택 수열

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

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	
	int n;
	cin >> n;

	queue<int> permut; // 입력받은 수
	for (int i = 0;i < n; i++)
	{
		int num;
		cin >> num;

		permut.push(num);
	}

	queue<char> result; // '+', '-' 출력 결과값
	stack<int> s;
	int num = 1;
	while (!permut.empty())
	{
		int front = permut.front(); // 뽑아내야하는 수열의 수

		if (!s.empty() && front == s.top()) // 뽑아내야하는 수이면 뽑아낸다.
		{
			result.push('-');
			s.pop();
			permut.pop();
			
			continue;
		}
		else
		{
			if (num > n) // 수열을 만들 수 없는 경우
				break;
			result.push('+');
			s.push(num++);
		}
	}

	if (!permut.empty())
		cout << "NO";
	else
	{
		while (!result.empty())
		{
			cout << result.front() << '\n';
			result.pop();
		}
	}

	return 0;
}

카테고리:

업데이트:

댓글남기기