Algorithm

[백준 10773] 제로

moguogu 2021. 7. 27. 20:43

제로

문제설명

image

단순히 0이 들어오면 가장 최근에 입력되었던 수를 뺴고 그렇지 않으면 저장한 뒤, 전체 수의 합을 출력하는 문제이다.


알고리즘

  1. 입력된 수가 0이면 stack 에서 top을 지운다.
  2. 입력된 수가 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