제로

25 June 2019

문제 : https://www.acmicpc.net/problem/10773

이번은 스택을 통해 합을 구하는 문제를 풀어보도록 하겠습니다.

import java.util.Scanner;

public class Main {

    public static void main(String args[]) {

        Scanner sc = new Scanner(System.in);

        int size = sc.nextInt();

        Stack stack = new Stack(100000);

        for (int i = 0; i < size; i++) {
            int val = sc.nextInt();
            if (val == 0) {
                stack.pop();
            } else {
                stack.push(val);
            }
        }

        int sum = 0;
        while (true) {
            int val = stack.pop();

            if (val == -1) {
                break;
            }

            sum += val;
        }

        System.out.println(sum);
    }
}

class Stack {
    private int top = -1;
    private int[] queue;

    Stack(int max) {
        queue = new int[max];
    }

    void push(int val) {
        top++;
        queue[top] = val;
    }

    int pop() {
        if (top == -1) {
            return -1;
        }
        int val = queue[top];
        top--;
        return val;
    }
}
먼저 class를 통해 stack을 구현하고, 들어오는 값에 따라 출력을 해주도록 합니다.
들어오는 값이 0인 경우 pop을 수행하고, 0이 아닌 수가 들어오는 경우는 push를 해주도록 합니다.
모든 val에 대해서 위처럼 수행하고, 현재 저장되어 있는 모든 값을 더해주기 위해 pop을 수행해서 -1이 나오기 전까지 모든 값을 더하고 출력합니다.