본문 바로가기

알고리즘(C++)/백준 알고리즘

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

 

풀이과정


첫 줄에 입력받은 N(iInput) 만큼 입력받아 벡터(v1)에 저장한다.

1부터 N까지 스택(st)에 push하면서 벡터(v1)의 처음 값부터 비교한다.

스택(st)의 top이 비교할 값과 같다면 스택(st)에서 pop해주고 다음 값을 비교한다. 

push할 때 '+', pop할 때 '-'를 벡터(v2)에 추가한다.

입력받은 값들이 스택으로 표현할 수 있다면  스택(st)은 empty 상태이므로 벡터(v2)의 값들을 출력해준다.

그렇지 않을 경우 "NO"를 출력한다.

 

코드


더보기
#include <iostream>
#include <stack>
#include <vector>
#include <string>

using namespace std;

int main()
{
	int iInput = 0, iNum = 0;;
	vector<int> v;
	stack<int> st;
	vector<char> v2;

	cin >> iInput;

	v.reserve(iInput);

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

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

		while (!st.empty())
		{
			if (st.top() == v.at(iNum))
			{
				st.pop();
				v2.push_back('-');
				iNum++;
			}
			else break;
		}
	}

	if (st.empty())
	{
		for (int i = 0; i < v2.size(); ++i)
		{
			cout << v2.at(i) << "\n";
		}
	}
	else cout << "NO";


	return 0;
}