알고리즘
[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();
}
}