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

2020. 8. 25. 00:35알고리즘 문제풀이

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 <algorithm>
#include <vector>
#include <stack>
#include <string>
using namespace std;

int main()
{
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);

	int n;
	int input;
	vector<int> input_list;
	stack<int> s;
	int pointer = 0;
	string result;

	cin >> n;

	for (int i = 0; i < n; i++)
	{
		cin >> input;
		input_list.push_back(input);
	}

	for (int i = 1; i <= n; i++)
	{
		s.push(i);

		result += "+";

		//스택의 top과 input_list[pointer]가 같다면 달라질때까지 스택에서 pop한다
		while (!s.empty() && s.top() == input_list[pointer])
		{
			s.pop();
			pointer++;

			result += "-";
		}

	}

	//입력된 수열을 완성하지 못했을때
	if (pointer != n)
		cout << "NO";

	else
	{
		for (int i = 0; i < result.size(); i++)
			cout << result[i] << "\n";
	}

	return 0;
}