백준

[백준_10773번] 제로

빙수빈수 2021. 7. 1. 16:20

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

 

10773번: 제로

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

www.acmicpc.net

[문제]

나코더 기장 재민이는 동아리 회식을 준비하기 위해서 장부를 관리하는 중이다. 재현이는 재민이를 도와서 돈을 관리하는 중인데, 애석하게도 항상 정신없는 재현이는 돈을 실수로 잘못 부르는 사고를 치기 일쑤였다. 재현이는 잘못된 수를 부를 때마다 0을 외쳐서, 가장 최근에 재민이가 쓴 수를 지우게 시킨다. 재민이는 이렇게 모든 수를 받아 적은 후 그 수의 합을 알고 싶어 한다. 재민이를 도와주자!

 

[입력 조건]

첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000)

 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경우 해당 수를 쓴다. 정수가 "0"일 경우에 지울 수 있는 수가 있음을 보장할 수 있다.

 

[코드]

import java.util.*;

public class BaekJoon_10773 {
	public static int point=0;
	public static int[] stack;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		int k=sc.nextInt();
		stack=new int[k];
		
		while(k-->0) {
			int n=sc.nextInt();
			
			// 0인 경우 최근에 입력 받는 숫자 제거
			if(n==0) {
				pop();
			}
			
			// 0이 아닌 정수를 입력 받은 경우 스택에 추가
			else {
				push(n);
			}
		} 
		
		int result=0;
		for(int i=0;i<stack.length;i++)
			result+=stack[i];
		
		System.out.println(result);
	}
	
	// 스택에 입력받은 데이터 추가
	public static void push(int data) {
		stack[point]=data;
		point+=1;
	}
	
	// 스택에 제일 위에 있는 값 제거
	public static int pop() {
		// 스택에 아무것도 없는 경우 0 반환
		if(point==0)
			return 0;
		else {
			int res=stack[point-1];
			stack[point-1]=0;
			point-=1;
			return res;
		}
	}
}

 

[고찰]

 앞선 문제를 통해 스택의 기본적인 push(int x), pop() 함수를 구현해 봤기 때문에 쉽게 풀 수 있는 문제였다. 입력 정수에 따라 두 함수를 적절히 사용해주면 되었다.

'백준' 카테고리의 다른 글

[백준_4949번] 균형잡힌 세상  (0) 2021.07.01
[백준_9012번] 괄호  (0) 2021.07.01
[백준_10828번] 스택  (0) 2021.07.01
[백준_2981번] 검문  (0) 2021.07.01
[백준_9375번] 패션왕 신해빈  (0) 2021.07.01