이번 문제는 실버 4 난이도의 10773번 제로문제이다.

접근법
정수 K의 수가 최대 100,000 이기에 vector 나 배열을 사용하면 push & sum 과정에서 시간 복잡도가 O(n)이기에 O(n^2)가 되어 TLE가 발생하는 것을 확인할 수 있었다. 따라서 큐 혹은 스택 둘 중 하나를 사용해야 하는데, 가장 최근에 쓴 수를 지우는 동작을 반복하기 때문에 선입선출 구조의 큐보다 스택이 알맞는 것을 확인할 수 있었다.
아래는 작성한 코드이다.
#include <bits/stdc++.h>
using namespace std;
int main (void){
ios::sync_with_stdio(0); cin.tie(0);
stack<int> s;
int N;
cin >> N;
for (int i = 0; i < N; i++){
int temp;
cin >> temp;
if (temp == 0) {
s.pop();
}
else s.push(temp);
}
int sum = 0;
while (!s.empty()){
sum += s.top();
s.pop();
}
cout << sum;
}'매일 BOJ' 카테고리의 다른 글
| (매일 BOJ) C++ 1966번 프린터 큐 (0) | 2025.07.15 |
|---|---|
| (매일 BOJ) C++ 4949번 균형잡힌 세상 (0) | 2025.07.14 |
| (매일 BOJ) C++ 11651번 좌표 정렬하기 2 (0) | 2025.07.13 |
| (매일 BOJ) C++ 2839번 설탕 배달 (0) | 2025.07.13 |
| (매일 BOJ) C++ 1676번 팩토리얼 0의 개수 (6) | 2025.07.13 |