minimimi
[백준] 10773 제로 본문
반응형
문제링크] https://www.acmicpc.net/problem/10773
문제요약
스택을 이용하여 데이터를 저장한다. "0"을 입력 받을 때 pop하고 "0"이 아닌 수를 입력 받으면 push한다. 마지막에 스택에 있는 모든 수를 더하여 출력한다.
풀이
단계별로 풀어보기에 스택 단계 문제입니다. 스택을 직접 구현하여 문제를 해결할 수 도 있겠지만 C++의 STL 라이브러리를 이용하여 문제를 해결해 보겠습니다. 그 전에 우선 stack이 무엇인가에 대해서 알아야 되겠죠?
스택(stack)이란?
스택은 자료구조 중 하나로 LIFO(Last In First Out) 구조를 가지고 있습니다. 즉, '나중에 들어온 데이터가 먼저 나간다' 라는 것입니다.
그림과 같이 아래쪽이 막힌 상자에 데이터를 저장하는 자료구조가 바로 스택입니다. 한 쪽이 막혀있기 때문에 데이터는 차례차레 쌓이면서 저장되고, 데이터를 다시 뺄 때에는 위에 있는 데이터부터 차례로 빼야 됩니다.
stack 사용법
생성자
- 기본 생성자
stack <데이터 타입> 변수명;
예시)
stack <int> int_stack;
stack <char> char_stack;
- 내부 컨테이너 구조를 바꾸는 생성자
stack <데이터 타입, 컨테이너 타입> 변수명;
예시)
stack <int, list<int>> list_stack;
stack <stack, vector<string>> vector_stack;
맴버 함수
함수 | 반환형 | 매개변수 | 기능 |
empty | bool | void | 스택이 비었으면 true 아니면 false 반환 |
pop | void | void | 스택의 top에 있는 원소 제거 |
push | void | 데이터 타입 | 데어터를 스택에 삽입 |
size | 사이즈 타입 | void | 스택의 사이즈를 반환 |
top | 데이터 타입 | void | 스택의 top에 있는 원소 반환 |
stack 라이브러리를 이용하면 매우 간단하게 문제를 해결할 수 있습니다.
우선 stack를 선언해주고 숫자를 입력받습니다. 숫자를 입력받아 스택에 push하고 0을 입력받을 경우 pop를 할 수 있도록 해주면 됩니다.
소스 코드는C/C++로 작성하였습니다.
#include <iostream>
#include <stack>
using namespace std;
stack <int> s;
int main() {
int num;
int result = 0;
cin >> num;
for (int i = 0; i < num; i++) {
int x;
cin >> x;
if (x == 0) s.pop();
else s.push(x);
}
int size = s.size();
for (int i = 0; i < size; i++) {
result += s.top();
s.pop();
}
cout << result;
}
반응형
'프로그래밍 공부 > 알고리즘' 카테고리의 다른 글
[CodeUp] 4891 : 행복 (0) | 2019.08.07 |
---|---|
[백준] 10845 큐 (0) | 2019.08.06 |
[백준] 2902 KMP는 왜 KMP일까? (0) | 2019.07.31 |
[백준] 2798 블랙잭 (0) | 2019.07.30 |
[백준] 2231 분해합 (0) | 2019.07.30 |