렝무식

[백준 10773번] 제로 (JAVA) 본문

Algorithm/Baekjoon

[백준 10773번] 제로 (JAVA)

렝9 2023. 1. 13. 14:05

BOJ - [10773] 제로


image


🖍 숫자를 저장하고 0을 부르면 이전 숫자를 지운다. 이후에 숫자들을 합한 값을 출력하는 문제
(link) 10773 제로


[풀이 과정]

스택을 사용하는 문제다. 스택은 대표적인 후입선출(LIFO) 자료구조이므로 해당 문제를 아주 쉽게 해결할 수 있다.

 

0이 아닌 수를 부르면 그대로 저장하고, 0을 부르면 저장하지 않고 스택 맨 위에 있는 값을 빼는 식으로 진행한다.
그렇게 수가 걸러지면 stack에는 유효한 숫자들만 남아있게 된다.

 

스택 최상단 값을 반환하는 peek와 스택 최상단 값을 삭제하는 pop 메소드로 차례차례 스택에서 값을 꺼내 값을 합하면 되겠다.


[Pseudocode]

1. stack 선언
2. 테스트 케이스 개수 k 선언
3. stack에 저장할 정수형 변수 num과 num들의 합 sum 선언
4. for i=0 부터 k까지 반복
    5. num에 숫자 입력
    6. if num=0
        7. stack에서 pop
    8. else
        9. stack에 num push
10. while stack이 빌 때까지 반복
    11. sum += stack에서 peek
    12. stack.pop

[Code]

import java.util.*;

/**
 * 백준 10773번
 * 제로
 * 분류 : 구현, 자료 구조, 문자열, 스택
 */

 public class Problem13 {
     public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        Stack<Integer> stack = new Stack<>();
        int k = input.nextInt(); // 테스트 케이스 개수
        int num;
        int sum = 0;
        for(int i=0 ; i<k ; i++) {
            num = input.nextInt();
            if(num == 0) // 0을 부를시 최근 숫자를 지운다 (stack에서 pop)
                stack.pop();
            else // 0이 아닌 수면 해당 숫자를 쓴다 (stack에서 push)
                stack.push(num);
        } 

        while (!stack.empty()) { // stack에서 남은 수들을 빼면서 합산
            sum += stack.peek(); 
            stack.pop();
        }

        System.out.println(sum);

        input.close();
     }
 }

[Result]

image


(2021.07.26 풀이분)

스택이라는 자료구조만 알고 있다면 정말 쉽게 풀리는 문제다.

하지만 모른다면 어떻게 풀어야 할지 난감하겠지.. 그래서 실버4 준건가 싶기도 하고.. (알면 브론즈 수준인데)

Comments