728x90
문제
재현이는 재민이를 도와서 돈을 관리 중이다.
재현이는 잘못된 수를 부를 때마다 0을 외쳐서 가장 최근에 재민이가 쓴 수를 지우도록한다.
재민이는 이렇게 모든 수를 받아 적은 후 그 수의 합을 구한다.
입력
첫 번째 줄에 정수 K
이후 K개의 줄에 정수가 1개씩 주어진다.
0일 때는 가장 최근의 수를 지우고 아닐 경우 해당 수를 쓴다
출력
최종적으로 적어 낸 수의 합을 출력한다.
C++
숫자를 입력하다가 0이 나오면 가장 최근에 입력한 수를 제거해야한다. 따라서 스택의 특성을 활용할 수 있다. 스택은 데이터를 넣고 빼는 입구가 한 개이다. 그래서 데이터를 넣다가 뺀다면 가장 최근에 넣었던 데이터가 제거된다. 다음은 스택을 이용한 풀이과정이다.
1. 입력된 K만큼 숫자를 입력하여 num에 저장한다.
2. num에 저장된 수가 0이라면 스택을 pop()하여 가장 최근에 입력된 수를 제거한다.
2. num에 저장된 수가 0이 아니라면 스택에 push()한다.
3. K만큼의 수를 입력받았다면 스택이 empty()일 때까지 스택의 top()에 있는 수를 최종해에 더한다.
4. 이때 top()에 있는 수를 더할 때마다 pop()을 하고 최종적으로 합을 출력한다.
#include "pch.h"
#include <iostream>
#include <stack>
using namespace std;
int main()
{
int K;
cin >> K;
stack<int> st;
for (int i = 0; i < K; i++) {
int num;
cin >> num;
if (num == 0)
st.pop();
else
st.push(num);
}
int result = 0;
while (!st.empty()) {
result += st.top();
st.pop();
}
cout << result << endl;
}
python
K = int(input())
numbers = []
for k in range(K):
num = int(input())
if num == 0:
numbers.pop()
else:
numbers.append(num)
print(sum(numbers))
'알고리즘 풀이 > 백준' 카테고리의 다른 글
[백준 6603] 로또 cpp-py (0) | 2021.01.28 |
---|---|
[백준 3986] 좋은단어 cpp-py (0) | 2021.01.27 |
[백준 7568] 덩치 cpp-py (0) | 2021.01.26 |
[백준 2231] 분해합 cpp-py (0) | 2021.01.26 |
[백준 2309] 일곱 난쟁이 (0) | 2021.01.26 |