1. 풀이방법
- 문제 설명이 약간 부족한 감이 있는데, 예시를 보면서 아 이렇게 하라는 거구나 라고 알게 되었습니다.
- 1~n까지의 숫자를 보는데 입력으로 들어오는 만들어야되는 것들은 큐에 담아 놓고 앞에서 부터 비교를 했습니다.
- 말로 설명이 어려워 아마 코드를 보시면 이해가 쉽게되실듯 합니다.
2. 주의사항
- 이런류의 문제가 사실 꽤 어렵게 느껴집니다. 개인적으로...
- 여러번 풀어봐야 할 것 같습니다.
3. 나의코드
#include<iostream>
#include<stdio.h>
#include<stack>
#include<queue>
using namespace std;
int main() {
cin.tie(NULL);
ios_base::sync_with_stdio(false);
int n, tmp;
cin >> n;
queue<int> qar; //만들어야하는 결과
vector<bool> oper; //결과 출력을 위한 +,- 저장벡터
stack<int> sar; // 만들기 위해 사용할 스택
for(int i=0;i<n;i++) {
cin >> tmp;
qar.push(tmp);
}
for (int i = 1; i <= n; i++) {
if (i == qar.front()) {
sar.push(i);
oper.push_back(1);
sar.pop();
oper.push_back(0);
qar.pop();
while (1) {
if (sar.empty() == false) {
if (sar.top() == qar.front()) {
sar.pop();
oper.push_back(0);
qar.pop();
}
else { break; }
}
else { break; }
}
}
else {
sar.push(i);
oper.push_back(1);
}
}
if(sar.empty()==true){
for (int i = 0; i < oper.size(); i++) {
if (oper[i] == 1) {
cout << '+' << '\n';
}
else {
cout << '-' << '\n';
}
}
}
else { cout << "NO" << '\n'; }
return 0;
}
'알고리즘 문제풀이 > 스택' 카테고리의 다른 글
백준 1406 [C++] (0) | 2021.01.09 |
---|---|
백준 10799 [C++] (0) | 2021.01.09 |
백준 3986 (0) | 2020.03.02 |
백준 2493 (0) | 2020.01.08 |