문제

 

0을 외치면 스택에서 pop을 해준 후 모든 수를 받아 적으면 스택의 합을 구하면 된다.


예제 입출력

 


코드

#include <iostream>
#include <stack>

using namespace std;

stack<int> myStack;

void solution(int n) {
	if (n != 0) {
		myStack.push(n);
	}
	else {
		if (!myStack.empty()) {
			myStack.pop();
		}
	}
}

int sum() {
	int answer = 0;

	while (!myStack.empty()) {
		answer += myStack.top();
		myStack.pop();
	}

	return answer;
}

int main() {
	int N;
	cin >> N;
	while (N--) {
		int order;
		cin >> order;
		solution(order);
	}
	cout << sum();

	return 0;
}

 

스택의 기초 문제지만 예외 처리에 대한 생각을 키울 수 있었다!!

 


틀린 코드

더보기
#include <iostream>
#include <stack>

using namespace std;

stack<int> myStack;

void solution(int n) {
	if (n != 0) {
		myStack.push(n);
	}
	else {
		myStack.pop();
	}
}

int sum() {
	int answer = 0;

	for (int i = 0; i < myStack.size(); i++) {
		answer += myStack.top();
		myStack.pop();
	}

	return answer;
}

int main() {
	int N;
	cin >> N;
	while (N--) {
		int order;
		cin >> order;
		solution(order);
	}
	cout << sum();

	return 0;
}

 

스택이 비어 있을 때의 예외 처리를 안했다.