[백준,BOJ 10773] 제로(JAVA 구현)
코테/백준 온라인 저지(BOJ)

[백준,BOJ 10773] 제로(JAVA 구현)

반응형

- 풀이

  문제의 분류 자체가 스택이기 때문에 스택을 사용해야 한다는 생각이 들기도 하지만, 문제를 잘 읽어보면 정수가 계속 입력될 때 '0'이 입력되면 0이 입력되기 이전의 정수 하나를 지우기 때문에 최근에 입력된 데이터가 가장 먼저 출력되는 LIFO 구조의 스택을 사용해야 한다는 사실을 알 수 있다.

 

  필자는 처음에 모든 정수를 입력받아 스택에 PUSH해준 뒤, POP 해가면서 0이 나오면 한 번 더 POP을 하는 식으로 접근하였지만, 예제 입력 2와 같이 0이 연속으로 입력되는 경우, 최근의 정수를 제대로 지우지 못하기 때문에 입력받을 때 0이면 바로 지워주게끔 풀이하였다.

 

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

public class Main { 
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		int k = Integer.parseInt(br.readLine());
		
		// Stack 객체.
		Stack<Integer> stack = new Stack<>();
		
		// 데이터 입력.
		for(int i=0;i<k;i++) {
			int x = Integer.parseInt(br.readLine());
			
			// 입력 데이터가 0이고, Stack이 비어있지 않다면, 최근의 수를 지워준다.
			if(x==0 && !stack.empty()) stack.pop();
			// 나머지의 경우는 push 해준다.
			else stack.push(x);
			
		}
		
		int sum = 0;
		
		// Stack이 빌 때 까지 누적합을 구한다.
		while(!stack.empty()) {
			sum+=stack.pop();
		}
		
		bw.write(String.valueOf(sum));
		
		bw.flush();
		bw.close();		
		br.close();
	     
	}

}

 

반응형