백준 - 10773번: 제로

Lee·2023년 5월 11일
0

알고리즘

목록 보기
25/34
post-thumbnail

문제 출처

문제 출처 : 제로

문제 이해하기

입력으로 주어진 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이다.

이 문제는 스택 자료구조를 활용하여 풀 예정이다.

  1. K를 입력받는다.
  2. K만큼 반복문을 돌린다. (반복)
    2-1. 순서대로 정수를 입력받는다.
    2-2. 0이 아닌 경우 스택에 추가 (분기)
    2-3. 0인 경우 스택에서 삭제
  3. 2의 과정이 끝난 후 최종적으로 계산된 합을 출력한다.

제출 코드

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);

	}

}

0개의 댓글