본문 바로가기

백준/C++

[C++] 백준 10773번 - 제로

728x90

 

 

문제 10773번

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

 

10773번: 제로

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

www.acmicpc.net

 

입력받은 값을 vector에 저장해준다. 그리고 벡터의 사이즈 만큼 반복문을 돌려서 0이 있는지 확인한다. 만약 0이라면 해당 인덱스와 최근에 쓴 수의 인덱스를 erase()를 통해 지워준다. 여기서 지운 인덱스 2개를 빼줘야한다. 마지막으로 accumulate로 합을 구해준다.

 

#include <iostream>
#include <vector>
#include <numeric>
using namespace std;

int k,n;

int main() {
	vector<int> num;
	cin >> k;
	for (int i = 0; i < k; i++) {
		cin >> n;
		num.push_back(n);
	}

	for (int j = 0; j < num.size(); j++) {	//size():벡터 크기
		if (num[j] == 0) {
			num.erase(num.begin() + j);	//j번째 인덱스에 있는 원소 삭제(0인거)
			num.erase(num.begin() + j - 1);	//최근에 쓴 수
			j -= 2; //지워진 2개를 인덱스에서 지워줌
		}
	}
	cout << accumulate(num.begin(), num.end(), 0);	//0->sum의 초기값
}

 

 

 

벡터.size(): 벡터의 크기
벡터.erase(벡터시작점+지우고 싶은 인덱스): 해당 인덱스에 있는 원소 삭제
accumulate(벡터 처음, 벡터 마지막, 초기값): 처음부터 마지막까지 전체 수를 더한다.
728x90