백준(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
'언어 > c, c++' 카테고리의 다른 글
백준(BAEKJOOB) 1260번 DFS와 BFS // c++언어 (0) | 2023.02.02 |
---|---|
백준(BAEKJOOB) 1427번 소트인사이드 c++언어 (0) | 2023.01.24 |
백준(BAEKJOOB) 10989번 수 정렬하기3 문제 c언어 (0) | 2023.01.19 |
백준(BAEKJOOB) 10828번 스택(stack)문제 c++언어 (0) | 2023.01.19 |
필요한 사이트 + c언어 c++ 기초 정리 (0) | 2023.01.18 |