[백준 BOJ] 10773번 제로 (C++/cpp)

2022. 2. 5. 19:02PS (Program Solving)/BOJ (백준)

문제 설명

https://www.acmicpc.net/problem/10773

 

10773번: 제로

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

www.acmicpc.net

백준 BOJ 10773번 제로 문제 사진
백준 BOJ 10773번 제로 문제 사진2

 

접근 방법 - 스택을 이용한 사칙연산 문제

백준의 10773번 문제는 스택을 이용하여 정답을 구해내야하는 사칙연산 문제이다.

위 문제에는, 0을 입력받으면 최근 적은 숫자를 지우고, 이 외의 숫자를 입력받으면 연이어 숫자를 적는 규칙이 있다.

이 규칙을 기반으로 하여, 적힌 숫자들의 총합을 구하여 해결하면 되는 문제이다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

필자가 스택을 이용한 방법은 아래를 참고해보길 바란다.

 

코드의 실행 순서

1) 스택(s)을 선언한다.

 

2) 입력되는 숫자의 개수(n)를 입력받는다.

 

3) n에 따라 차례로 숫자를 입력받으면서, 아래의 연산을 동시에 수행한다.

- 0이 아닌 수가 입력되면, 해당 숫자를 스택에 push한다.

- 0이 입력되면, pop 연산을 수행한다.

 

4) 정답을 저장할 변수 sum을 0으로 초기화하고 선언한다.

 

5) 스택이 비어있지 않다면, 스택의 크기만큼 아래 연산을 수행한다.

- top 값을 sum에 더한다.

- pop 연산을 수행한다.

 

6) 최종적으로 저장된 sum값을 출력한 뒤, 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <stack>
#include <string>
using namespace std;

//백준 10773번 코드
int main() {
	stack<int> s;
	int n, num;
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> num;
		if (num != 0) {
			s.push(num);
		}
		else {
			s.pop();
		}
	}

	int sum = 0;
	int size = s.size();
	if (!s.empty()) {
		for (int i = 0; i < size; i++) {
			sum += s.top();
			s.pop();
		}
	}
	cout << sum;
}

 

제출 결과

백준 BOJ 10773번 제로 문제 C++ 제출 결과

(2021.12.31 백준 10773번 문제 제출 결과)

반응형