문제 출처 : 제로
입력으로 주어진 K만큼 정수 1개씩 입력이 되는데 이때 0이 입력된 경우 가장 최근에 입력된 숫자를 하나씩 빼고, 최종적으로 전체 수의 합을 구하는 문제이다.
문제에 나와있는 예제 2를 시뮬레이션 해보면
[1]
[1,3]
[1,3,5]
[1,3,5,4]
[1,3,5] (0을 불렀기 때문에 최근의 수를 지운다)
[1,3] (0을 불렀기 때문에 그 다음 최근의 수를 지운다)
[1,3,7]
[1,3] (0을 불렀기 때문에 최근의 수를 지운다)
[1] (0을 불렀기 때문에 그 다음 최근의 수를 지운다)
[1,6]
합은 7이다.
이 문제는 스택 자료구조를 활용하여 풀 예정이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
static Stack<Integer> stack = new Stack();
static int totalMoney = 0;
private static void calculateMoney(int money) {
if (money != 0) {
stack.push(money);
totalMoney += money;
return;
}
totalMoney -= stack.pop();
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int K = Integer.parseInt(br.readLine());
while (K-- > 0) {
int money = Integer.parseInt(br.readLine());
calculateMoney(money);
}
System.out.println(totalMoney);
}
}