알고리즘 공부/백준

(Python)백준 코딩테스트 연습 - 제로(10773)

HRuler 2023. 1. 9. 17:39

1. 문제

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

 

10773번: 제로

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

www.acmicpc.net

2. 풀이

from collections import deque
import sys

# n : 수의 개수
n = int(sys.stdin.readline())

# n_l : 수를 저장할 deque
n_l = deque()
for i in range(n):
    # num : 입력받은 수
    num = int(sys.stdin.readline())
    
    # num이 0일 경우 이전 수를 삭제
    if num == 0:
        n_l.pop()
    # num이 0이 아니면 n_l에 추가
    else:
        n_l.append(num)
print(sum(n_l))

3. 후기

 - 이전 카드2에서 사용했던 deque를 이용했다. 가장 큰 이유는 문제를 보고 pop 함수를 사용하여 풀어야 하는 형태였고, 문제에서의 입력 은 100,000인 상황에서 list 형태의 pop은 O(N)의 시간 복잡도를 가지기 때문에 O(1)의 시간 복잡도를 가지는 효율적인 형태의 deque를 사용했다.