백준 10773번: 제로 문제 (JAVA) 스택문제

728x90

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

 

10773번: 제로

첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경

www.acmicpc.net


스택문제입니다.

힌트를 보시면 입력된 정수를 계속 쌓습니다.

0이 입력이되면 제일 최근에 쌓인 정수를 지웁니다.

그렇게 마지막 까지 남은 숫자들을 모두 더해서 출력하는 문제입니다.


전체 코드입니다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

public class Main {
    public static void main(String[] args) throws IOException {
        Stack<Integer> stack = new Stack<>();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        for (int i=0; i<N; i++){
            int num = Integer.parseInt(br.readLine());
            if (num != 0){
                stack.push(num);
            } else {
                stack.pop();
            }
        }
        int size = stack.size();
        int sum = 0;
        for (int i=0; i<size; i++){
            sum = sum + stack.pop();
        }
        System.out.println(sum);
    }
}

Stack<Integer> stack = new Stack<>();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());

스택을 만들어줍니다.

입력은 BufferedReader로 받겠습니다.

첫 번째 줄에 N개의 정수를 받기 위해 변수를 만듭니다.


for (int i=0; i<N; i++){
    int num = Integer.parseInt(br.readLine());
    if (num != 0){
        stack.push(num);
    } else {
        stack.pop();
    }
}

N개의 정수만큼 반복합니다.

반복되는 만큼 정수를 입력받습니다.

그 정수가 0이 아니면 stack에 push를 하여 해당 정수를 쌓습니다.

0이면 pop를 하여 제일 위에 있는 정수를 빼줍니다.


int size = stack.size();
int sum = 0;
for (int i=0; i<size; i++){
    sum = sum + stack.pop();
}
System.out.println(sum);

스택의 사이즈를 변수로 만듭니다.

합계를 위해 변수를 만듭니다.

스택에 size만큼 반복합니다.

스택에 있는 수를 빼서 합계를 구합니다.

출력합니다.


스택을 활용하면 어렵지 않은 문제입니다.

반응형