본문 바로가기
Algorithm

백준 10773번 <제로>

by seungh2 2022. 5. 2.

백준 알고리즘 10773번

https://www.acmicpc.net/problem/10773

 

10773번: 제로

첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경

www.acmicpc.net


10773번

재현이는 잘못된 수를 부를 때마다 0을 외쳐서 가장 최근에 재민이가 쓴 수를 지우게 시킨다. 

재민이는 이렇게 모든 수를 받아 적은 후 그 수의 합을 구하여라.

 

입력으로 첫 줄에 정수 k가 주어지고 그 다음 k개의 줄에 걸쳐 k개의 정수가 주어진다.

 

출력으로 재민이가 최종적으로 적어낸 수의 합을 출력하면 된다.


문제 해결

stack을 이용하여 문제를 풀 수 있다.

주어진 정수가 0이 아닐 때는 스택에 넣고 0일 때는 스택에서 값을 꺼내면 된다.

 

우리는 합을 구하는 것이기 때문에 주어진 정수가 아닐 때는 sum에 더하고 0일 때는 스택의 top에 있는 값을 sum에서 뺀다.


코드

package bj10773;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		int n = Integer.parseInt(br.readLine());
		Stack<Integer> stack = new Stack<>();

		int sum = 0;
		for (int i = 0; i < n; i++) {
			int input = Integer.parseInt(br.readLine());
			if (input == 0) {
				sum -= stack.pop();
			} else {
				sum += input;
				stack.add(input);
			}
		}
		System.out.println(sum);

	}

}

결과


 

728x90

댓글