문제를 해석하자면 다음과 같다.
입력은 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;
}
'개발일지 > 알고리즘' 카테고리의 다른 글
백준 1966번 : 프린터 큐 (0) | 2025.01.28 |
---|---|
백준 1158번 : 요세푸스 문제 (0) | 2025.01.25 |
백준 9012번 : 괄호 (0) | 2025.01.24 |
백준 10867번 : 중복 빼고 정렬하기 (0) | 2025.01.23 |
백준 11651번 : 좌표 정렬하기 2 (0) | 2025.01.23 |