득이공간
[백준 C++] 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 <vector>
#include <stack>
#include <queue>
using namespace std;
int main()
{
bool possible = true;
int n = 0;
cin >> n;
vector<int> sequence;
sequence.reserve(n);
for (int i = 0; i < n; ++i)
{
int inputNumber = 0;
cin >> inputNumber;
sequence.emplace_back(inputNumber);
}
stack<int> outputStack;
for (int i = n; i > 0; --i)
{
outputStack.push(i);
}
queue<bool> result;
stack<int> inputStack;
for (int i = 0; i < n; ++i)
{
while ((inputStack.empty() || inputStack.top() < sequence[i])
&& !outputStack.empty())
{
inputStack.push(outputStack.top());
outputStack.pop();
result.push(true);
}
if (inputStack.top() == sequence[i])
{
inputStack.pop();
result.push(false);
continue;
}
else
{
possible = false;
break;
}
}
if (!possible)
{
cout << "NO\n";
return 0;
}
while (!result.empty())
{
if (result.front())
{
cout << "+\n";
}
else
{
cout << "-\n";
}
result.pop();
}
}
sequence: 입력받은 수열을 담는 벡터입니다.
outputStack: 스택에 채워넣을 숫자 1부터 n까지를 보관하는 스택입니다.
inputStack: 문제에서 제시한 오름차순으로 숫자를 채워넣기위한 스택입니다.
result: 수열 생성이 불가능한 경우에 "NO" 메시지만 출력해야하기 때문에 프린트할 문자 +, -를 큐에 저장해 놓습니다.
'PS > 알고리즘 문제풀이' 카테고리의 다른 글
[백준 C++] 1260 DFS와 BFS - 깊이우선탐색, 너비우선탐색 (0) | 2024.01.25 |
---|---|
[백준 C++] 2667 단지번호붙이기 - 깊이우선탐색 (1) | 2024.01.24 |
[백준 C++] 2606 바이러스 - 깊이우선탐색 (1) | 2024.01.24 |
[백준 C++] 1931 회의실 배정 - 그리디 (0) | 2024.01.23 |
[백준 C++] 1463 1로 만들기 - 다이나믹프로그래밍 (0) | 2024.01.22 |