코딩테스트/백준

[백준] 10773 제로

민톨이 2024. 10. 20. 04:00
728x90

📋 문제

나코더 기장 재민이는 동아리 회식을 준비하기 위해서 장부를 관리하는 중이다.

재현이는 재민이를 도와서 돈을 관리하는 중인데, 애석하게도 항상 정신없는 재현이는 돈을 실수로 잘못 부르는 사고를 치기 일쑤였다.

재현이는 잘못된 수를 부를 때마다 0을 외쳐서, 가장 최근에 재민이가 쓴 수를 지우게 시킨다.

재민이는 이렇게 모든 수를 받아 적은 후 그 수의 합을 알고 싶어 한다. 재민이를 도와주자!

 

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

 

📋 입력

첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000)

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

정수가 "0"일 경우에 지울 수 있는 수가 있음을 보장할 수 있다.

 

 

📋 풀이

import java.util.*;

public class Main {
    // 동적 배열은 크기 .size()로
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int k = sc.nextInt();
        ArrayList<Integer> arr = new ArrayList<>();
        
        //입력값을 처음부터 다 받으려고 했는데 그러면 안됨
        for (int i = 0; i < k; i++) {
            int n = sc.nextInt();

            if(n==0){
                //n이 0이면 제일 최근 요소 제거 (배열 마지막 인덱스)
                arr.remove(arr.size()-1);
            } else {
                arr.add(n); //0이 아니면 추가
            }
        }
        int sum = 0;
        for (int i : arr) {
            sum +=  i;
        }
        System.out.println(sum);
    }
}

 

자세한 풀이는 주석에 ,,,

 

스택을 풀어보는건 첨이라 .size()이런건 참고를 했다

 

여태 풀었던 것들은 입력값을 한번에 주르륵 받고 시작했어서 뭔가 그래야할 것 같았는데 풀다보니 아닌 것 같아서 고쳐나갔음. 제법 뿌듯함

'코딩테스트 > 백준' 카테고리의 다른 글

[백준] 11382 꼬마 정민  (0) 2024.10.26
[백준] 3052 나머지  (0) 2024.10.21
[백준] 10818 최소, 최대  (0) 2024.10.17
[백준] 10871 X보다 작은 수  (0) 2024.10.17
[백준] 2480 주사위 세개  (0) 2024.10.15