2022년 8월 21일에 작성
https://www.acmicpc.net/problem/15828
15828번: Router
인터넷을 사용하기 위해서는 컴퓨터에 인터넷 회선을 연결하거나 Wi-Fi를 연결해야 한다. 이렇게 연결된 네트워크를 통해 컴퓨터에는 통신이 가능하다. 마음에 드는 노래나 동영상이 있는 곳에
www.acmicpc.net
문제 분석
큐(queue) 자료 구조에서 데크(deque) 자료 구조를 이용한다.
소스 코드 (⭕)
from collections import deque
import sys
input = sys.stdin.readline
n = int(input())
buffer = deque()
while True:
x = int(input())
if x == -1:
break
if x == 0 and len(buffer) != 0:
buffer.popleft()
elif x != 0 and len(buffer) != n:
buffer.append(x)
if len(buffer) == 0:
print("empty")
else:
print(*buffer)
코드 분석
1. n을 입력받고, buffer을 deque형으로 변환한다.
2. 무한 반복문으로, x를 입력받고 x가 -1이면 break 해준다.
3. x가 0이고 buffer의 길이가 0이 아니라면, buffer의 맨 왼쪽 첫 번째 요소를 제거한다.
4. x가 0이 아니고 buffer의 길이가 n이 아니라면, buffer에 요소 x를 추가한다.
5. 반복문을 나와서 buffer의 길이가 0이면 "empty"를 출력해주고, 0이 아니라면 buffer의 요소를 한 줄로 출력해준다.
✍️ deque 자료 구조
collections 모듈의 deque는 double-ended queue의 약자로 데이터를 양쪽 방향에서 (앞, 뒤) 요소를 추가하거나 제거할 수 있는 자료 구조이다.
deque는 list에는 없는 popleft()라는 메서드를 제공한다. 이 메서드를 사용하면 첫 번째 데이터를 제거할 수 있다. 데이터의 흐름은 list 객체의 pop(0) 메서드를 사용할 때 처럼 뒤에서 앞으로 흐르게 된다.
>>> from collections import deque
>>>
>>> queue = deque([4, 5, 6])
>>> queue.append(7)
>>> queue.append(8)
>>> queue
deque([4, 5, 6, 7, 8])
>>> queue.popleft()
4
>>> queue.popleft()
5
>>> queue
deque([6, 7, 8])
end
문제가 너무 어려워서 코드를 다 검색해서 가져왔다... ㅠ_ㅠ;;
'코딩테스트 & 문제 풀이' 카테고리의 다른 글
[Python]백준_2941 : 크로아티아 알파벳 (0) | 2023.06.23 |
---|---|
[Python]백준_1547 : 공 (0) | 2023.06.23 |
[Python]백준_2161 : 카드1 (0) | 2023.06.21 |
[Python]백준_10773 : 제로 (0) | 2023.06.02 |
[C]백준_17608 : 막대기 (0) | 2023.06.01 |