[BaekJoon] #10773 제로

현굥·2024년 8월 17일

BaekJoon

목록 보기
12/53

문제


문제이해

  1. 첫번째 입력에 횟수를 입력받고, 횟수만큼 어떠한 연산을 합니다.
    연산은 다음과 같습니다.
  • 입력한 수가 0이면, 가장 최근에 쓴 수를 지우고, 0이 아니라면 입력받아서 저장해주면 됩니다.
  1. 구하려는 값은 마지막 입력이 끝났을 때, 저장된 결과의 합입니다.

입력

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

출력

재민이가 최종적으로 적어 낸 수의 합을 출력한다. 최종적으로 적어낸 수의 합은 231-1보다 작거나 같은 정수이다.

문제접근

  1. 첫번째 입력에 횟수를 입력받고, 횟수만큼 어떠한 연산을 합니다.
  • 앞에서 풀었던 스택2 문제처럼, 입력받은 횟수만큼 for 문을 돌리면 될 것 같습니다.
  • 연산의 결과값을 저장하기 위해 사용할 수 있는 방법이 많아 보이는데 stack으로 구현해서 메소드 갖다쓰는게 제일 편할 듯 하여, ArrayDeque<> 를 사용했습니다.
  • 입력한 수가 0이면, 가장 최근에 쓴 수를 지우고, 0이 아니라면 입력받아서 저장해주면 됩니다.
  • if-else문으로 경우를 나누어서 stack연산 해주었습니다.
  1. 구하려는 값은 마지막 입력이 끝났을 때, 저장된 결과의 합입니다.
  • 최종 구하려는 합은 iteration을 선언하여, 마지막 연산이 끝났을때 stack를 순회하여, 값들을 sum변수에 저장해주었습니다.

소감 ......
내가 완전하게 구현했다 ! ㅋㅋㅋ재민이가 어쩌구할때 한숨먼저 나왔는데 생각보다 쉬워서 점점 재미를 찾아가는중
베스트 코드일지는 모름 아모튼 맞았다 헤헷

code

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.ArrayDeque;
import java.util.Iterator;


public class Main{
    public static void main(String[] args) throws IOException{
        ArrayDeque<Integer> stack = new ArrayDeque<>();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int k = Integer.parseInt(br.readLine());


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

        int sum = 0 ;

        Iterator<Integer> it = stack.iterator();

        while(it.hasNext()){
            sum += it.next();
        }
        System.out.println(sum);

    }
}

0개의 댓글