View

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

 

10773번: 제로

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

www.acmicpc.net

📚 문제

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

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

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

예제 입력 1 예제 출력 1
4
3
0
4
0
0
10
1
3
5
4
0
0
7
0
0
6
7

 

📝 문제 해결

입력받은 수가

  • 0이 아닐 경우 stack에 해당 수를 추가 (push)
  • 0일 경우 stack에서 가장 위에 있는 수를 제거 (pop)

입력이 끝난 뒤 스택에 저장된 값들의 합을 출력해준다.

 

💻 코드

import java.util.*;

public class BOJ10773{
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        int k = sc.nextInt();
        
        Stack<Integer> stack = new Stack<Integer>();
        for(int i=0; i<k; i++){
            int n = sc.nextInt();
            if(n == 0) stack.pop();
            else stack.push(n);
        }
        
        int result = 0;
        while(!stack.isEmpty()) result+=stack.pop();
        
        System.out.println(result);
    }
}
728x90
Share Link
reply
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31