[백준1874] 스택 수열 (C++)
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main() {
stack<int> st;
int n, m = 0;
string ans;
cin >> n;
while (n--) {
int x;
cin >> x;
if (x > m) {
while (x > m) {
st.push(++m);
ans += '+';
}
st.pop();
ans += '-';
}
else {
bool judge = false;
if (!st.empty()) {
if (st.top() == x)
judge = true;
st.pop();
ans += '-';
}
if (!judge) {
cout << "NO" << '\n';
return 0;
}
}
}
for (auto c : ans)
cout << c << '\n';
return 0;
}
패인
런타임 에러: 백준에서 return 1; 코드는 프로그램이 비정상적으로 종료되었다고 판단된다고 한다.
출력 초과: 매 반복문이 돌아갈 때마다 judge를 false로 초기화해 줬어야 했는데 빼먹었다. 앞으로 실수하지 않도록 주의해야지
문제 이해
처음에 접근 방식을 완전히 잘못 생각했다. 스택에 담겨진 적 있는 숫자들을 배열 안에 저장한 뒤 매번 반복문을 돌려서 점검해줘야 하나 싶어서 암담했는데 그렇게 복잡하게 생각할 필요가 없었다. 스택에 담겨진 적 있는 최대 값 m을 선언하는 게 이 문제의 핵심이다.
Author And Source
이 문제에 관하여([백준1874] 스택 수열 (C++)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yoohoo030/백준1874-스택-수열저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)