[백준1874] 스택 수열 (C++)

1622 단어 ps백준ps

BOJ 바로가기

#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을 선언하는 게 이 문제의 핵심이다.

좋은 웹페이지 즐겨찾기