728x90
시간 제한 1초, 메모리 제한 512MB
# 조건
- 정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 여섯 가지이다.
- push X: 정수 X를 큐에 넣는 연산이다.
- pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 큐에 들어있는 정수의 개수를 출력한다.
- empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
- front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
입력
- 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다.
- 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다.
- 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다.
- 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
출력
- 출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
# 접근 방법
- front와 rear 포인터를 만들고 배열을 2,000,000의 크기로 만들어준 뒤 풀어도 된다.
- 하지만 파이썬의 deque가 있으므로 편하게 풀 수 있다.
- q = deque()로 선언해준 후 N번 반복하며 주어지는 명령을 조건문으로 나눠준다.
- 이후 각 명령어의 설명에 따라 append, popleft, q[0], q[-1]과 같이 조건문 내부에 로직을 구현해주면 된다.
import sys
sys.stdin = open('input.txt')
input = sys.stdin.readline
from collections import deque
N = int(input())
q = deque()
for _ in range(N):
query = list(input().strip().split())
if len(query) == 2:
q1, q2 = query[0], query[1]
else:
q1 = query[0]
if q1 == 'push':
q.append(q2)
elif q1 == 'pop':
print(q.popleft() if q else -1)
elif q1 == 'size':
print(len(q))
elif q1 == 'empty':
print(1 if not q else 0)
elif q1 == 'front':
print(q[0] if q else -1)
else:
print(q[-1] if q else -1)
728x90
'ALGORITHM > 자료구조' 카테고리의 다른 글
[백준 1158번] 파이썬 - 요세푸스 문제 (0) | 2023.09.23 |
---|---|
[백준 17298번] 파이썬 - 오큰수 (2) | 2023.09.15 |
[백준 21939번] 파이썬 - 문제 추천 시스템 Version 1 (0) | 2023.09.02 |
[백준 5446번] 파이썬 - 용량 부족 (1) | 2023.08.27 |
[백준 19583번] 파이썬 - 싸이버 개강총회 (0) | 2023.08.26 |