Article Image
Article Image
read
문제
재현이는 재민이를 도와서 동아리 장부를 관리하고 있다.
재현이는 영수증을 모아서 동아리의 지출 금액을 세고 있고, 재민이는 재현이가 부르는 액수를 순서대로 적고 있다.
재현이는 가끔 잘못된 수를 부르는 실수를 하는데, 이 때마다 0을 외쳐서, 가장 최근에 재민이가 쓰고 지우지 않았던 수를 지우게 시킨다.
재현이가 모든 수를 부른 후 재민이가 받아 적은 수의 합은 무엇일까?
입력
첫 번째 줄에 테스트 케이스의 수 TC가 주어진다.
각 테스트 케이스는 다음과 같이 구성되었다.
첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000)
이후 K개의 줄에 정수가 하나씩 주어진다. 정수는 0 이상 100000 이하의 값이다.
만약 정수가 0일 경우에는 최근에 쓰고 지우지 않았던 수를 지워야 하며, 그렇지 않을 경우 해당 수를 써야 한다.
정수가 0일 경우에 지울 수 있는 수가 있음을 보장할 수 있다.
출력
각 테스트 케이스마다 ‘#x’(x는 테스트케이스 번호를 의미하며 1부터 시작한다)를 출력하고,
각 테스트 케이스마다 한 줄씩 재민이가 받아 적은 수의 합을 출력한다.
예제 입력 1
2 //테스트 케이스 개수
6 //첫 번째 테스트 케이스 K = 6
10000
10000
0
0
100000
0
10 //두 번째 테스트 케이스 K = 10
1
3
5
4
0
0
7
0
0
6
예제 출력 1
#1 0 // 첫 번째 테스트 케이스 결과
#2 7
풀이
import java.util.Scanner;
import java.util.Stack;
class Solution
{
public static void main(String args[]) throws Exception
{
Scanner sc = new Scanner(System.in);
int T;
T=sc.nextInt();
for(int test_case = 1; test_case <= T; test_case++)
{
int N=sc.nextInt();
Stack<Integer> stack = new Stack<Integer>();
int cnt=0;
for(int i=0; i<N; i++) {
int x = sc.nextInt();
if(x != 0) {
stack.push(x);
}
else {
stack.pop();
}
}
while(!stack.empty()) {
cnt+=stack.pop();
}
System.out.println("#"+test_case+" "+cnt);
}
}
}