[SWEA] 8931 - 제로 (D3)

yamkim·2020년 10월 7일
0

SWEA

목록 보기
1/2
  • 문제 링크: 8931 - 제로

  • 문제 이해
    1. 재민이는 재현이로부터 듣는 수를 누적시키며 기입합니다.
    2. 재현이가 0을 부르면, 재현이는 가장 최근에 적은 수 한개를 지웁니다.
    3. 따라서 마지막까지 남는 수는 (전체에서 입력받은 수 - 받은 0의 수)만큼일 것입니다.

  • 알고리즘 구현
    1. stack 자료구조와 같은 형식을 구현할 것입니다.
    2. vector를 이용하여, 0이 아닌 수는 vector에 넣고, 0을 받으면 stack에서 수를 뺍니다.
    3. 단, 처음부터 0이 나오는 경우, vector에 값이 없으므로, 건너 뛰도록 합니다.

#include <iostream>
#include <vector>

using namespace std;

int main(void) {
	ios_base::sync_with_stdio(false);
	cin.tie(0);

	int TC;
	cin >> TC;
	for (int t = 1; t <= TC; ++t) {
		int K;
		cin >> K;
		vector<int> ledger;
		for (int i = 0; i < K; ++i) {
			int tmp;
			cin >> tmp;
			if (tmp == 0) {
				// 비어있는 경우, pop_back을 수행하지 않음
				if (ledger.empty()) continue ;
				ledger.pop_back();
				continue ;
			}
			// 0이 아닌 경우, 수를 장부에 기입.
			ledger.push_back(tmp);
		}
		int sum = 0;
		for (int record : ledger)
			sum += record;
		printf("#%d %d\n", t, sum);
	}
	return (0);
}

0개의 댓글