본문 바로가기
코딩테스트/문제 풀이

[자바] 백준 10773번 제로

by 왕자두 2024. 7. 3.

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

 

[문제 이해]

덱을 사용하는 것에 대한 이해만 있다면 풀 수 있는 어렵지 않은 문제였다. 0이 나오면 덱에 있던 원소를 삭제하면 되고, 0이 아니라면 저장하는 단순한 플로우로 문제를 해결했다.

 

[문제 풀이]

0인 경우, 덱에 아예 저장하지 않고 바로 덱에 있는 가장 마지막 값을 삭제하는 방식으로 구현하면 됐다. 스택을 사용하는 문제라고 생각하면 쉬운데 덱 라이브러리를 사용하면 풀 수 있어서 어렵지 않게 풀었던 것 같다. 합을 구할 때는 덱에 있는 원소를 모두 poll()로 없애면서 반환하도록 구현하였다.

 

import java.io.*;
import java.util.*;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        Deque<Integer> deque = new ArrayDeque<>();
        int N = Integer.parseInt(br.readLine());
        int sum = 0;
        for(int i = 0; i < N; i++){

            int tmp = Integer.parseInt(br.readLine());
            if(tmp == 0){
                deque.pollLast();
            }
            else{
                deque.offerLast(tmp);
            }
        }

        while(deque.size() > 0){
            sum += deque.poll();
        }

        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        bw.write(String.valueOf(sum));
        bw.flush();
        bw.close();
    }
}