https://www.acmicpc.net/problem/1874
역시 스택을 사용하는 문제인데 처음에 딱 문제를 봤을 땐 어떻게 코드를 짜야할지 모르겠어서 좀 당황했다
풀고나서 다시 보면 쉽지만... 처음 풀 땐 내가 이 정도로 빡대가리였나 좀 고민할뻔 함
#include <iostream>
#include <stack>
#include <vector>
int main()
{
std::stack<int> stack;
std::vector<char> vec;
bool success = true;
int numLimit;
std::cin >> numLimit;
int asscentNum = 1;
while (numLimit--)
{
int n;
std::cin >> n;
for (int i = asscentNum; i <= n; ++i)
{
vec.push_back('+');
stack.push(i);
++asscentNum;
}
if (!stack.empty() && stack.top() == n)
{
vec.push_back('-');
stack.pop();
}
else success = false;
}
if (success)
{
for (int i = 0; i < vec.size(); ++i) std::cout << vec[i] << "\n";
}
else std::cout << "NO";
}
1부터 오름차순으로 입력한 마지막 숫자 + 1을 저장하는 변수 asscentNum,
만일 새로 입력된 숫자가 asscentNum보다 크거나 같으면 asscentNum부터 새로 입력된 숫자까지를 오름차순으로 스택에 push하고 asscentNum을 재지정
스택의 top이 새로 입력된 숫자와 같으면 pop
'Computer > 알고리즘&백준' 카테고리의 다른 글
[백준][C++] 백준 시간 초과날 때 (0) | 2022.12.02 |
---|---|
[백준][C++] 요세푸스 문제 0 (0) | 2022.12.01 |
[백준][C++] 4949 균형잡힌 세상 (0) | 2022.11.29 |
[백준][알고리즘][C++] 2750 수 정렬하기, 버블 정렬, 삽입 정렬 (0) | 2022.11.19 |
[백준][C++] 2738 행렬 덧셈 (0) | 2022.11.16 |