초보 개발자의 이야기, 릿허브

[C++] 백준 10773번 제로 본문

코딩테스트/📗 백준 (BOJ)

[C++] 백준 10773번 제로

릿99 2021. 8. 20. 11:00
728x90
반응형
1. 문제이해

10773번: 제로 (acmicpc.net)

 

10773번: 제로

첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경

www.acmicpc.net

 

첫번째 줄에 정수 K를 입력받고, K개의 숫자를 입력받는다.

숫자를 입력받는 도중 0이 나오면, 0이 나오기 전의 숫자를 삭제한다.

위와 같은 규칙으로 숫자를 입력받아, 남아있는 숫자들의 합을 출력하는 알고리즘을 구현하는 것이 목표이다.

 

 

 

2. 문제풀이

 

K개의 정수를 입력받아, 0이 나오면 그 전의 숫자를 삭제하는 방식의 문제이다.

문제를 읽자마자 스택을 사용해야겠구나라는 생각이 들었다.

스택(stack)이란, LIFO(후입선출)구조의 자료구조로, 제일 마지막에 넣은 원소를 처음으로 반환한다.

C++에서 스택도 구현을 하고 있어서 C++을 이용해 구현을 하기로 했다.

(학교에서 수업들을때는 매번 C로 하나하나 구현해야했어서 힘들었는데..😭)

stack은 지난번 set와 쓰는 방법이 거의 동일했는데,

기본적인 사용법은 다음과 같았다.

 

1. stack <데이터 타입> 이름 ; 형태로 선언해준다.

ex) stack <int> s;

 

2. s.size();
: 스택의 사이즈를 반환한다.

3. s.top();

: 스택의 맨 위에 있는 인자를 반환한다.

 

4. s.push(element);

: 스택에 데이터(element)를 삽입한다.

 

5. s.pop();

: top이 가리키는 원소를 삭제한다.

 

스택에 대한 더 자세한 내용은 아래 블로그에 잘 정리되어있으니 참고하자.

https://life-with-coding.tistory.com/406

 

[C++][STL] Stack 기본 사용법 및 예제

인트로 오늘은 C++의 STL중 하나인 Stack(스택) 기본 함수에 대해서 알아보도록 하겠습니다. 목차 1. 스택(Stack)이란? 2. 스택 헤더 파일 3. 스택 기본 함수 1. 스택이란? 스택(Stack)은 대표적인 LIFO(Last In

life-with-coding.tistory.com

 

 

 

3. 소스코드
#include <iostream>
#include <stack>
using namespace std;

int main() {
	stack<int> s;
	int K;
	int num;
	int stack_size;
	int sum = 0;
	
	cin >> K;	// 입력받을 정수의 개수

	for (int i = 0; i < K; i++) {
		cin >> num;	// 숫자를 입력받아,
		if (num == 0) {	// 0이면 
			s.pop();	// top(0 이전)에 있는 숫자를 pop
		}
		else
			s.push(num); // 0이 아니면 stack에 push
	}

	stack_size = s.size();
	for (int i = 0; i < stack_size; i++) {
		sum += s.top();	// top에 있는 숫자를 하나씩 꺼내가며 더하기
		s.pop();
	}

	cout << sum;

	return 0;
}

스택구조를 이용해 위와 같이 코드를 구현했다.

입력받을 정수의 개수 K를 입력받고, K번만큼 숫자들을 입력받는다.

만약 숫자가 0이면, 스택에 쌓여있는 숫자들 중 제일 위에 있는,

즉, 0을 입력받기 전 마지막으로 입력받은 숫자를 스택에서 제거(pop)한다.

만약 입력받은 숫자가 0이 아니라면, 그대로 스택에 저장(push)한다.

 

위와 같은 과정을 통해 스택에 자료들을 모두 저장한 후,

스택에 있는 원소들을 하나씩 꺼내가며 더하고, 출력해주었다.

(제일 위에 있는 원소(top)를 더한 후, 삭제(pop)해주어, 원소들을 더해가는 형식으로 구현했다.)

 

 


C++에는 스택도 구현이 되어있다니... 큰 충격을 받았다..

2학년 자료구조 배울때는 무조건 다 C로 구현을 했어야해서, (교수님...)

아무것도 모르던 시절 + 직접 구현해야 하는 자료구조들로 엄청난 스트레스를 받았었는데..

이렇게 좋은 내장함수가 구현이 되어있을 줄이야..😰

역시 C보다는 C++이 개인적으로는 더 좋은것같다... 최고최고...👍

그리고 오늘 아침 9시에 정보처리기사 합격확인을 했다ㅎㅎ

2회차 필기실기 모두 한번에 합격해서 너무너무너무 기분이 좋다🥰

조만간 공부후기나 한번 써볼까...ㅎㅎ

 

정보처리기사 합격 후기는 아래에 개시해두었습니다. 😊

https://beginnerdeveloper-lit.tistory.com/37

 

2021 정보처리기사 동회차 합격후기

수제비 네이버 카페에도 동일한 내용 기재했습니다.🤗 수첩형 자격증이 오면 쓰려고 했던 정보처리기사 합격 후기입니다. 다른 분들보다 조금 늦은 합격 후기이지만, 수제비 책, 카페 등을 통

beginnerdeveloper-lit.tistory.com

 

 

 

 

 

728x90
반응형