minimimi

[백준] 10773 제로 본문

프로그래밍 공부/알고리즘

[백준] 10773 제로

99mini 2019. 8. 6. 00:38
반응형

문제링크] https://www.acmicpc.net/problem/10773

 

10773번: 제로

문제 나코더 기장 재민이는 동아리 회식을 준비하기 위해서 장부를 관리하는 중이다. 재현이는 재민이를 도와서 돈을 관리하는 중인데, 애석하게도 항상 정신없는 재현이는 돈을 실수로 잘못 부르는 사고를 치기 일쑤였다. 재현이는 잘못된 수를 부를 때마다 0을 외쳐서, 가장 최근에 재민이가 쓴 수를 지우게 시킨다. 재민이는 이렇게 모든 수를 받아 적은 후 그 수의 합을 알고 싶어 한다. 재민이를 도와주자! 입력 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤

www.acmicpc.net


문제요약

스택을 이용하여 데이터를 저장한다. "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