알고리즘/백준

[백준 10773]- 제로- JAVA [스택사용]

놀이방사장님 2024. 1. 13. 23:49
728x90
반응형

안녕하세요 놀이방 사장입니다.

 

이번 포스팅은 백준 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.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;

public class Main{
    public static void main(String args[]) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int n = Integer.parseInt(br.readLine());
        int sum = 0;
        Stack<Integer> coin = new Stack<>();

        for(int i=0; i<n; i++){
            int value = Integer.parseInt(br.readLine());
            if( !coin.isEmpty() && value == 0){
                coin.pop();
            }else{
                coin.push(value);
            }
        }

        while(!coin.isEmpty()){
            sum += coin.pop();
        }

        System.out.println(sum);
        bw.flush();
        bw.close();
    }
}

 

위에서 말한 로직은

for(int i=0; i<n; i++){
    int value = Integer.parseInt(br.readLine());
    if( !coin.isEmpty() && value == 0){
        coin.pop();
    }else{
        coin.push(value);
    }
}

해당 부분은에 n갯수만큼 반복문을 돌리는데 먼저 0이 들어오면 스택이 비었는지 확인을 하고 비어있지 않을 경우 스택에서 값을 하나 빼줍니다.

 

그 후에 스택에서 남아있는 숫자를 다 더해주면 결과가 나옵니다

while(!coin.isEmpty()){
    sum += coin.pop();
}

 

 

 

궁금하신 점이 있으시면 댓글 남겨주세요!

 

감사합니다.

반응형