Stay Hungry Stay Foolish

BOJ 코딩테스트/Silver

BOJ 10773번 : 제로 (Python/Silver 4)

dev스카이 2023. 5. 2. 19:12
 

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"일 경우에 지울 수 있는 수가 있음을 보장할 수 있다.

 

출력

재민이가 최종적으로 적어 낸 수의 합을 출력한다. 최종적으로 적어낸 수의 합은 2^(31-1)보다 작거나 같은 정수이다.


예제 입력

4
3
0
4
0

예제 출력

0

풀이

 

스택 기본 연산

▶ push() : 스택에 원소를 추가한다.

▶ pop() : 스택에 가장 위에 있는 원소를 삭제하고, 그 원소를 반환한다.

▶ peek() : 스택의 가장 위에 있는 원소를 삭제하지 않고, 그 원소를 반환한다.

▶ empty() : 스택이 비어있다면 1을 반환, 비어있지 않다면 0을 반환한다.

 

그러나 파이썬에서는 스택 라이브러리가 내장되어 있지 않아서, 덱 라이브러리를 import해서 사용한다.

Solution

from collections import deque
import sys
input = sys.stdin.readline

stack = deque() #덱 생성
for _ in range(int(input())):
    k = int(input())
    if k == 0:
        stack.pop()
    else:
        stack.append(k)
print(sum(stack))