백준 baekjoon

[백준 BOJ] 10773 제로 C++

JUN_Kestrel 2024. 2. 3. 21:34

백준 10773번: 제로

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

 

10773번: 제로

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

www.acmicpc.net


문제

예제

  • 문제해석 및 풀이

 이 문제는 주어지는 정수들을 차례로 입력하다가 0이 입력되면 가장 최근 입력된 정수를 삭제하고 마지막에는 입력된 모든 정수의 합을 출력하는 문제이다. 문제를 보자마자 어떻게 풀어야 할 지 감이 오는 어렵지 않은 문제였다. 벡터를 이용해 입력을 받다가 0이 입력되면 가장 최근에 입력받은 정수를 삭제하는 방식으로 코드를 구현했다.

 

  • 코드
#include <iostream>
#include <vector>
using namespace std;

vector<int> v;

int main() {
	int k;
	long long int sum = 0;
	cin >> k;
	for (int i = 0; i < k; i++) {
		int num;
		cin >> num;
		if (num == 0)
			v.pop_back();
		else
			v.push_back(num);
	}
	for (int i = 0; i < v.size(); i++) {
		sum += v[i];
	}
	cout << sum;
	return 0;
}

 벡터의 마지막 원소를 지워주는 pop_back함수와 마지막 원소 뒤에 새로운 원소를 추가해주는 push_back함수를 이용해 쉽게 구현할 수 있었던 문제였다. 참고로 최종 합의 숫자가 꽤 크기 때문에 sum 변수는 long long int로 선언해 주었다.

 

  • 정리

 문제의 난이도가 높지 않았기 때문에 간단하게 구현할 수 있었다.

 

 궁금한 것이나 더 나은 코드 및 방법, 그리고 잘못된 것이 있다면 댓글에 남겨주시기 바란다.