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를 사용했다.
'알고리즘 공부 > 백준' 카테고리의 다른 글
(Python)백준 코딩테스트 연습 - 큐(10845) (0) | 2023.01.10 |
---|---|
(Python)백준 코딩테스트 연습 - 나는야 포켓몬 마스터 이다솜(1620) (0) | 2023.01.09 |
(Python)백준 코딩테스트 연습 - 카드2(2164) (2) | 2023.01.09 |
(Python)백준 코딩테스트 연습 - 균형잡힌 세상(4949) (0) | 2023.01.08 |
(Python)백준 코딩테스트 연습 - 동전 0(11047) (0) | 2023.01.08 |