문제 |
10773번: 제로
첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경
www.acmicpc.net
코드 |
#include <iostream>
#include <stack>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
stack<int> st;
int k;
cin >> k;
while (k--) {
int tmp;
cin >> tmp;
if (tmp == 0) st.pop();
else st.emplace(tmp);
}
int sum = 0;
while (!st.empty()) {
sum += st.top();
st.pop();
}
cout << sum;
return 0;
}
설명 |
0을 입력받을 때마다 가장 최근의 수를 지운다.
즉, 가장 마지막에 입력된 값을 관리해야하기 때문에 LIFO 자료구조인 스택을 사용하여야 한다.
'PS > BOJ' 카테고리의 다른 글
[C++] BOJ (백준) 10816 : 숫자 카드 2 (0) | 2023.03.05 |
---|---|
[C++] BOJ (백준) 10814 : 나이순 정렬 (0) | 2023.03.05 |
[C++] BOJ (백준) 10250 : ACM 호텔 (0) | 2023.03.05 |
[C++] BOJ (백준) 9012 : 괄호 (0) | 2023.03.01 |
[C++] BOJ (백준) 7568 : 덩치 (0) | 2023.03.01 |