백준(BAEKJOOB) 10773번 제로 문제 c++언어

2023. 1. 21. 12:09언어/c, c++

728x90

 


 

힌트

예제 2의 경우를 시뮬레이션 해보면,

  • [1]
  • [1,3]
  • [1,3,5]
  • [1,3,5,4]
  • [1,3,5] (0을 불렀기 때문에 최근의 수를 지운다)
  • [1,3] (0을 불렀기 때문에 그 다음 최근의 수를 지운다)
  • [1,3,7]
  • [1,3] (0을 불렀기 때문에 최근의 수를 지운다)
  • [1] (0을 불렀기 때문에 그 다음 최근의 수를 지운다)
  • [1,6]

합은 7이다.


이글은 #include<stack> 라이브러리를 이용하였습니다. 

이 문제를 간단하게 설명하면 스택을 만들어서 0이나오면 빼고 남은 숫자들을 더하는 것이 목표이다.

int main() {
	stack<int>stack;
	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		int s;
		cin >> s;
		if (s != 0) {
			stack.push(s);
		}
		else {
			stack.pop();
		}

	}
}

그러면 먼저 총 입력받을 케이스 n과

n안에서 받을 숫자 s 를 만들어 준후 

s가 0이아니면 s숫자를 스택에 넣어줍니다

그리고 0이거나 다른거면 pop(삭제 해줍니다)

 

 

 

그런후 총 합들을 저장할 sum 변수 선언 해주시고

	int sum = 0;
	int size = stack.size();
	for (int i = 0; i < size; i++) {
		sum += stack.top();
		stack.pop();
	}
	cout << sum << ' ';

stack.size()  스택의 크기를 size라는 변수에 주고

 

stack의 위에 숫자를 계속 더해줍니다 그리고 pop 해주고 다시 돌려서 숫자가 없어 질때 까지

그런후 sum 출력

 

 

 

총 코드

 

 

 

 

#include<iostream>
#include<string>
#include<stack>

using namespace std;

int main() {
	stack<int>stack;
	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		int s;
		cin >> s;
		if (s != 0) {
			stack.push(s);
		}
		else {
			stack.pop();
		}
	}
	int sum = 0;
	int size = stack.size();
	for (int i = 0; i < size; i++) {
		sum += stack.top();
		stack.pop();
	}
	cout << sum << ' ';
}
728x90