컴퓨터 공부/📚 Baekjoon(백준)

[백준/알고리즘/python/java] 10773번 - 제로

letzgorats 2021. 2. 13. 16:03

이미지를 누르면 문제링크를 보실 수 있습니다.
이미지를 누르면 문제링크를 보실 수 있습니다.
10773번 - 제로

전형적인 스택 문제이다.

파이썬에서는 스택을 구현할 때, 리스트를 활용하여 

push 역할은 append() 로 구현하고

pop 역할은 pop() 으로 구현하면 된다.

 

(코드는 아래와 같다. -python)

k = int(input())
sum = 0
number_list = []
for i in range(k):
    n = int(input())
    if n == 0:                  # 입력된 수가 0 이면 pop
        number_list.pop(-1)     
    else:
        number_list.append(n)
for answer in number_list:
    sum += answer
print(sum)

pop() 안에 따로 인덱스 인자를 안 넣어주면 맨 끝의 원소를 빼준다. (pop(-1) 이나 pop()이나 같은 역할이다.)

 

(아래는 이전에 풀었던 자바 코드 이다. - java)

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));
		StringBuilder sb = new StringBuilder();
		int n = Integer.parseInt(br.readLine());
		Stack<Integer> stack = new Stack<>();
		int sum=0;
		for(int i=0;i<n;i++){
			int tmp = Integer.parseInt(br.readLine());
			if(tmp!=0) {
				stack.push(tmp);
				sum+=tmp;
			}
			else {
				sum-=(stack.peek());
				stack.pop();
			}
		}
		br.close();
		sb.append(sum).append("\n");
		System.out.println(sb.toString());
	}
}

시간은 파이썬에 비해(3956ms) 자바가 훨씬 적게 걸렸다. (216ms) 

반응형