제로
문제설명
단순히 0이 들어오면 가장 최근에 입력되었던 수를 뺴고 그렇지 않으면 저장한 뒤, 전체 수의 합을 출력하는 문제이다.
알고리즘
- 입력된 수가 0이면 stack 에서 top을 지운다.
- 입력된 수가 1이면 stack 에 넣는다.
#include <stdio.h>
#include <iostream>
#include <stack>
using namespace std;
int main()
{
int K;
cin >> K;
stack<int> s;
int x;
for (int i = 0; i < K; i++)
{
cin >> x;
if (x == 0)
s.pop();
else
s.push(x);
}
int sum = 0;
for (int i = 0; s.size(); i++)
{
sum += s.top();
s.pop();
}
cout << sum << endl;
return 0;
}
Stack(LIFO) 관련 함수
-> LIFO :last in first out
-> 나중에 온 것이 가장 먼저 나간다.
- push : top에 원소추가
- pop : top에 원소 삭제
- top : top에 있는 원소 반환
- size: stack 사이즈 반환
- empty: 비어있는지 여부반환
고찰
단순히 가장 최근에 입력 된 값을 지워야 하기 때문에 stack을 사용하면 간단해지는 문제였다.
'Algorithm' 카테고리의 다른 글
[백준 10866] 덱 (0) | 2021.07.28 |
---|---|
[백준 5430] AC (0) | 2021.07.28 |
[백준 7576] 토마토 (0) | 2021.07.27 |
[백준 12904] A와 B (0) | 2021.07.27 |
[백준 2206] 벽 부수고 이동하기 (0) | 2021.07.27 |