문제
https://www.acmicpc.net/problem/10773
문제 설명
장부에 K번만큼 숫자를 쓰거나 지우는데, 입력받는 숫자가 0이면 가장 최근 숫자를 지우고 0이 아니라면 해당 수를 쓴다.
최종적으로 0이 아닌 숫자들의 합을 구하면 된다.
코드
#include <iostream>
#include <stack>
using namespace std;
int main() {
int K; cin >> K;
int total = 0;
stack <int> account;
for (int i = 0; i < K; i++) {
int num; cin >> num;
if (num != 0) {
total += num;
account.push(num);
}
else {
total -= account.top();
account.pop();
}
}
cout << total << '\n';
}
코드 설명
스택을 사용하면 쉽게 풀 수 있는 문제이다.
0이 아닌 숫자를 입력하면 스택에 푸쉬하고 0을 입력하면 팝을 한다.
푸쉬를 할 때 총합을 구하는 변수에 입력받은 숫자를 더해나가고
팝을 할 때 총합을 구하는 변수에 최근 숫자를 빼줘서 스택 관리와 총합을 한번에 처리할 수 있다.
최근 숫자는 스택의 top() 함수를 사용하면 얻을 수 있다.
여담
반년 전 쯤에 같은 문제를 푼 적이 있는데, 그 때보다 푸는 시간도 줄고 코드 길이나 코드의 깔끔한 정도가 확실히 좋아졌다.
실력이 늘어난 게 느껴지는 문제였다.
'Koala - 11기 > 기초 알고리즘 스터디' 카테고리의 다른 글
[백준/C언어] 20499번 Darius님 한타 안 함? (0) | 2023.07.16 |
---|---|
[백준/Python3] 2839번: 설탕 배달 (0) | 2023.07.16 |
[백준/C++] 2839번: 설탕 배달 (0) | 2023.07.16 |
[백준/Python3] 1330번 : 두 수 비교하기 (0) | 2023.07.16 |
[백준/Python] 1551번: 수열의 변화 (0) | 2023.07.15 |