Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Archives
Today
Total
관리 메뉴

시간이 NullNull

[JAVA] [SWEA] 8931. 제로 본문

알고리즘

[JAVA] [SWEA] 8931. 제로

4NIng 2020. 2. 23. 02:41

재현이는 재민이를 도와서 동아리 장부를 관리하고 있다.


재현이는 영수증을 모아서 동아리의 지출 금액을 세고 있고, 재민이는 재현이가 부르는 액수를 순서대로 적고 있다.


재현이는 가끔 잘못된 수를 부르는 실수를 하는데, 이 때마다 0을 외쳐서, 가장 최근에 재민이가 쓰고 지우지 않았던 수를 지우게 시킨다.


재현이가 모든 수를 부른 후 재민이가 받아 적은 수의 합은 무엇일까?

 

 

ps. 정말 불쌍하게도 쓰고 지우고 쓰고 지우고를 반복하는 재민이를 위로해줍시다....

 

이 문제의 경우 그냥 시키는 대로 코드를 작성하면 된다.

 

다만 최근에 쓴 것을 지우게 되는데 이때 가장 좋은 것이 stack이기 때문에 stack을 활용하여 코드를 작성해 보았다.

 

들어오는 수를 다 stack에 넣다가 0이 들어오면 pop을 해주면되는 아주 간단한 문제이다.

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;
 
public class Solution {
 
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int T = Integer.parseInt(br.readLine());
        for(int t=1; t<=T; ++t) {
            int k = Integer.parseInt(br.readLine());
            Stack<Integer> stack = new Stack<Integer>();
            for(int i=0; i<k; ++i) {
                int n = Integer.parseInt(br.readLine());
                if(n == 0) {
                    if(!stack.isEmpty()) {
                        stack.pop();
                    }
                }else {
                    stack.push(n);
                }
            }
            int result = 0;
            while(!stack.isEmpty()) {
                result += stack.pop();
            }
            bw.write("#"+t+" "+result+"\n");
        }
        bw.close();
        br.close();
    }
}
Comments