728x90
문제 풀이 순서는 아래와 같다.
1. 입력할 숫자의 개수 k 입력
2. k개만큼의 수 입력 받기 (0을 입력했다면 최근에 입력한 수 지우기)
3. 입력을 완료했다면 남아있는 수 출력하기
최근에 입력한 수를 지우는 방법은 stack을 사용하면 된다.
스택은 LIFO의 형태이기 때문에 0을 push 했을 경우에,
두 번 pop 해주면 된다.
그렇게 코드를 작성해보자.
스택을 사용하기 위해서는 헤더를 추가해주어야 한다.
#include <stack>
입력받을 개수 k를 입력 받았다고 가정하고,
스택을 구현하자.
stack<int> st;
for(int i=0;i<k;i++){
cin >> n;
if(n == 0){
if(!st.empty()){
st.pop();
}
} else {
t.push(n);
}
}
스택을 이렇게 간단하게 구현할 수 있다!
0을 입력했을 때의 조건도 추가해주면 된다.
그럼 합은 어떻게 구하나요?
위에서 말했듯이 스택은 LIFO 구조이기 때문에
필자는 하나씩 pop을 해주면서 더하는 방법을 택할 것이다.
코드로 작성하면 아래와 같다.
int sum = 0;
while(!st.empty()){
sum += st.top();
st.pop();
}
간단하다.
전체 코드
#include <iostream>
#include <stack>
//제로
using namespace std;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int k,n;
cin >> k;
stack<int> st;
for(int i = 0; i < k; i++){
cin >> n;
if(n == 0){
if(!st.empty()){
st.pop();
}
} else {
st.push(n);
}
}
int sum = 0;
while(!st.empty()){
sum += st.top();
st.pop();
}
cout << sum << '\n';
return 0;
}
실버4의 문제였다. 앞서 공부했던(풀었던) 글들을 본다면 이번 문제는 기본 문제에 속한다는 것을 쉽게 알아차릴 수 있을 것이다.
자료구조나 스택 등의 알고리즘 문제는 보통 난이도가 실버 이상인 것 같다. 실버 난이도는 풀기도 전에 당황하고 들어가는 것 같은데, 이런 기본 문제부터 차근차근 풀어나가면 실버는 물론 골드 난이도의 문제까지도 풀어나갈 수 있을 것이다.
더 좋은 풀이가 있다면 댓글로 알려주세요 !!
피드백 환영입니다☺️
728x90
'Algorithm' 카테고리의 다른 글
[백준] 1436번 : 영화감독 숌 - C/C++ (2) | 2025.03.26 |
---|---|
[백준] 5347번 : LCM - C/C++ (0) | 2025.03.24 |
[백준] 13023번 : ABCDE - C/C++ (0) | 2025.03.17 |
[백준] 16953번 : A → B - C/C++ (1) | 2025.03.16 |
[백준] 11719번 : 그대로 출력하기 2 - C/C++ (0) | 2025.03.15 |