문제: 1874번: 스택 수열
#include <iostream>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
cin >> n;
int cnt = 0;
vector<int> save;
for (int i = 1; i <= n; i++) {
int tmp;
cin >> tmp;
save.push_back(tmp);
}
stack<int> s;
string answer;
int cur = 1;
bool flag = false;
while (true) {
if (cnt == n) break;
if (s.empty() || s.top() != save[cnt]) {
if (cur > n) {
flag = true;
break;
}
s.push(cur);
answer += "+";
cur++;
}
else if (s.top() == save[cnt]) {
s.pop();
answer += "-";
cnt++;
}
}
if (!flag) {
for (int i = 0; i < answer.size(); i++)
cout << answer[i] << "\n";
}
else
cout << "NO\n";
return 0;
}
기본적인 로직 토대는 완성했는데 while 문 종료 조건을 어떻게 줘야하는지 잘 모르겠어서 조금 헤맸다 -_-;; 그래도 문제 자체는 stack 개념 잘 알고 있으면 특성 이용해서 그대로 구현하면 되니까 엄청 어렵진 않았다..
아 종료조건 설정에서 헤맨건 살짝 충격인데... 앞으로도 열심히 해야할 것 같다;;