전형적인 스택 문제이다.
파이썬에서는 스택을 구현할 때, 리스트를 활용하여
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)
반응형
'컴퓨터 공부 > 📚 Baekjoon(백준)' 카테고리의 다른 글
[백준/알고리즘/python/java] 4949번 - 균형잡힌 세상 (0) | 2021.02.13 |
---|---|
[백준/알고리즘/python/java] 9012번 - 괄호 (0) | 2021.02.13 |
[백준/알고리즘/python/java] 10828번 - 스택 (0) | 2021.02.13 |
[백준/알고리즘/python/java] 2004번 - 조합 0의 개수 (0) | 2021.02.12 |
[백준/알고리즘/python/java] 1676번 - 팩토리얼 0 의 개수 (0) | 2021.02.11 |