

풀이과정
첫 줄에 입력받은 N(iInput) 만큼 입력받아 벡터(v1)에 저장한다.
1부터 N까지 스택(st)에 push하면서 벡터(v1)의 처음 값부터 비교한다.
스택(st)의 top이 비교할 값과 같다면 스택(st)에서 pop해주고 다음 값을 비교한다.
push할 때 '+', pop할 때 '-'를 벡터(v2)에 추가한다.
입력받은 값들이 스택으로 표현할 수 있다면 스택(st)은 empty 상태이므로 벡터(v2)의 값들을 출력해준다.
그렇지 않을 경우 "NO"를 출력한다.
코드
더보기
#include <iostream>
#include <stack>
#include <vector>
#include <string>
using namespace std;
int main()
{
int iInput = 0, iNum = 0;;
vector<int> v;
stack<int> st;
vector<char> v2;
cin >> iInput;
v.reserve(iInput);
for (int i = 0; i < iInput; ++i)
{
int input = 0;
cin >> input;
v.push_back(input);
}
for (int i = 1; i <= iInput; ++i)
{
st.push(i);
v2.push_back('+');
while (!st.empty())
{
if (st.top() == v.at(iNum))
{
st.pop();
v2.push_back('-');
iNum++;
}
else break;
}
}
if (st.empty())
{
for (int i = 0; i < v2.size(); ++i)
{
cout << v2.at(i) << "\n";
}
}
else cout << "NO";
return 0;
}
'알고리즘(C++) > 백준 알고리즘' 카테고리의 다른 글
| [백준] C++ 10845번 : 큐 (0) | 2019.11.08 |
|---|---|
| [백준] C++ 2504번 : 괄호의 값 (0) | 2019.11.08 |
| [백준] C++ 10799번 : 쇠막대기 (0) | 2019.11.07 |
| [백준] C++ 9012번 : 괄호 (1) | 2019.11.07 |
| [백준] C++ 10828번 : 스택 (0) | 2019.11.07 |