처음에는 도저히 무슨 말인지 이해가 가지 않아 여러 번 읽어 보았다.
나만 그런 건지는 모르겠는데 문제의 설명이 조금 부실한 것 같다.
수열이므로 1234 ~ 순서로 수를 스택에 채워서 수를 빼내면서 수의 나열을 만들 수 있는지 확인하라는 문제였는데, 정말 처음 읽고는 ?예? 했다.
1234 순으로 증가해가면서 원하는 수가 나올때까지 증가 시키며 stack 에 push 후
원하는 수와 만나면 pop 한다. 원하는 수가 스택 밑에 갇혀있지 않다면 무조건 꺼낼 수 있기 때문에 명확한 로직으로 보인다.
만약 원하는 수가 top에 없다면 수를 나열할 수 없다.
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
stack <int> s;
vector <char> result;
int main() {
int N;
cin >> N;
int j = 1;
for (int i = 0; i < N; i++)
{
int input;
cin >> input;
while (j <= input)
{
s.push(j);
j++;
result.push_back('+');
}
if (s.top() == input)
{
s.pop();
result.push_back('-');
}
else
{
cout << "NO";
return 0;
}
}
for (auto i : result)
{
cout << i << "\n";
}
return 0;
}
STL 컨테이너를 사용하는 것이 아직도 익숙하지 않나보다. 항상 또 상기시키며 사용하자. 모방부터 하여 내 것으로 만드는 것이 목표다.
'프로그래밍 공부 > 백준 (C++)' 카테고리의 다른 글
[C++/백준 10845번] 큐 (0) | 2024.10.12 |
---|---|
[C++/백준 1874번] 에디터 (0) | 2024.10.12 |
[C++/백준 9093번] 괄호 (0) | 2024.10.11 |
[C++/백준 9093번] 단어 뒤집기 (0) | 2024.10.11 |
[C++/백준 4948번] 베르트랑 공준 (0) | 2024.01.28 |