본문 바로가기
Algorithm/백준 자바

백준 10773 자바

by 눈오는1월 2024. 4. 20.
728x90

<문제>

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

 

10773번: 제로

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

www.acmicpc.net

<풀이>

1. 어떤 접근으로 문제를 접근하려고 했는지

0을 부를 때마다 직전의 적었던 번호를 지워야 한다. 즉 맨 마지막번째 숫자를 가지고 넣고 지우는 행위를 반복하는 문제이다. 

LIFO인 Stack을 활용하는 것이 효과적이라고 생각했다. (물론 일반적인 list도 가능하긴 하다)
2. 향상된 for문을 이용해 Stack의 모든 값들을 접근해서 다 더한 값을 구하려고 했다.

 

2. 문제를 해결하기 위한 기능
1) 0일 때 직전의 숫자를 삭제하는 기능

2) 입력이 끝났을 때 Stack에 남아있는 숫자를 더하는 기능

<코드>

import java.util.*;
import java.io.*;
public class Main {

    public static void main(String[] args)throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        Stack<Integer> stack = new Stack<>();
        int n = Integer.parseInt(br.readLine());
        for(int i = 0; i < n; i++) {
            int num = Integer.parseInt(br.readLine());
            if(num == 0) { // 0일때 직전의 값을 지우는 기능
                stack.pop();
            }
            else {
                stack.push(num);
            }
        }
        int sum = 0;
        for(int e : stack) { // 스택의 합 구하기
            sum += e;
        }
        System.out.println(sum);
    }
}

<후기>

스택은 인덱스로 접근하기 힘들기 때문에 위처럼 향상된 for문을 이용해서 접근했다.

향상된 for문은 Iterator로 접근하기 때문에 각 스택의 값들을 접근할 수 있다.

728x90

'Algorithm > 백준 자바' 카테고리의 다른 글

백준 2164 자바 (카드 2)  (0) 2024.04.22
백준 18258 자바 (큐 2)  (1) 2024.04.20
백준 28278 자바 (스택2)  (0) 2024.04.20
백준 15686 자바 (치킨 배달)  (0) 2024.03.11
백준 17298 오큰수 자바  (1) 2024.03.07