개발일지/알고리즘
백준 1874번 : 스택 수열
김진우 개발일지
2025. 1. 25. 20:09
문제를 해석하자면 다음과 같다.
입력은 N와, N개의 수로 이루어진 1~N의 중복 없는 수열을 받는다.
숫자 1부터 N까지 순서대로 스택에 push와 pop을 반복하는데, 이 때 입력받은 수열과 동일한 순서대로 숫자를 pop 하는 과정을 +와 -로 표시하면 된다.
#include <iostream>
#include <stack>
#include <vector>
#include <string>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int N;
cin >> N;
vector<int> nums(N);
vector<char> answer;
for (int i = 0; i < N; i++)
{
cin >> nums[i];
}
stack<int> numStack;
int lastNum = 0;
for (int i = 0; i < N; i++)
{
if (numStack.empty())
{
numStack.push(++lastNum);
answer.push_back('+');
}
int top = numStack.top();
if (nums[i] == top)
{
numStack.pop();
answer.push_back('-');
continue;
}
else if (top < nums[i])
{
if (nums[i] <= lastNum)
{
cout << "NO\n";
return 0;
}
while (nums[i] != lastNum)
{
numStack.push(++lastNum);
answer.push_back('+');
}
numStack.pop();
answer.push_back('-');
continue;
}
else
{
cout << "NO\n";
return 0;
}
}
for (char ch : answer)
{
cout << ch << "\n";
}
return 0;
}