suheang

[백준] | JAVA, 자바 | 10773번 - 제로 본문

알고리즘

[백준] | JAVA, 자바 | 10773번 - 제로

suheang 2024. 8. 28. 23:16

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


문제 요약 :

 


문제 풀이 :

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 {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int k = Integer.parseInt(br.readLine());

        Stack<Integer> stack = new Stack<>();

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

        int sum = 0;
        while (!stack.isEmpty()) {
            sum += stack.pop();
        }

        System.out.println(sum);
    }
}

 

1. 정수 k 입력받기

2. 스택 생성

3. 입력받은 k 만큼 반복해서 정수 입력받기

3 - 1. 만약 입력받은 정수가 0이라면 스택에 저장된 수 꺼내기

3 - 2. 0이 아니라면 입력받은 정수를 스택에 저장하기 

4. 저장된 모든 수의 합을 계산할 변수 sum 생성 

5. while 문을 사용해 stack이 빌 때까지 sum에 스택에서 꺼낸 값들을 더하기

6. sum 출력 

 

(처음 풀 때 while 문이 아닌 for 문을 사용해서 틀렸었다. 틀린 이유는 pop을 함으로써 스택의 size() 값이 계속 변하기 때문에 잘못된 값이었다. 이렇게 스택에 있는 값들을 다 꺼낼 땐 주로 while 문을 사용하고 조건을! stack.isEmpty()를 사용하여 스택이 비게 된다면 while 문을 종료하는 형식으로 진행한다.)