10845번: 큐
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
문제
정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 여섯 가지이다.
- push X: 정수 X를 큐에 넣는 연산이다.
- pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 큐에 들어있는 정수의 개수를 출력한다.
- empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
- front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
입력
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
출력
출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
풀이 방향
🔍 큐(queue)란?
한쪽으로 데이터를 삽입하고 다른 한쪽으로 데이터를 삭제하는 자료 구조임
먼저 들어간 데이터가 먼저 나오는 선입선출(First IN, First OUT) 구조
일반적으로 어떤 가게에서 주문을 하면 먼저 주문한 사람의 제품이 나오는 것과 같은 구조라고 생각하면 됨
📌 파이썬에서 큐(queue) 라이브러리도 제공함
1. Queue() : 일반적인 큐 자료구조
import queue
queue = queue.Queue()
# 데이터 넣기
queue.put(0)
queue.put('abc')
# 큐에 있는 데이터 갯수
queue.qsize() # 2
# 데이터 제거
queue.get() # abc → 가장 먼저 삽입된 데이터(0)이 제거됨
2. LifoQueue() : 나중에 입력된 데이터가 먼저 출력되는 자료구조 (stack과 유사 / Last IN First OUT)
import queue
queue = queue.LifoQueue()
# 데이터 넣기
queue.put(0)
queue.put('abc')
# 큐에 있는 데이터 갯수
queue.qsize() # 2
# 데이터 제거
queue.get() # 가장 먼저 삽입된 데이터(abc)가 제거됨
3. PriorityQueue() : 우선순위 큐 (데이터마다 우선순위를 넣어서 우선순위가 높은 순으로 데이터를 출력하는 자료구조)
import queue
queue = queue.PriorityQueue()
# 데이터 넣기
queue.put((10, 'abc')) # 우선순위를 표현하기 위해 튜플로 삽입 (우선순위, value)
queue.put((5, 1))
queue.put((15, 'def'))
# 큐에 있는 데이터 갯수
queue.qsize() # 3
# 데이터 제거
queue.get() # (5, 1) → 우선순위가 가장 높은 데이터가 제거됨
⭐ 참고 포스팅 ⭐
[python] 큐(Queue) 라이브러리 사용하기 - Queue, LifoQueue, PriorityQueue
Queue queue 의 기본인 FIFO(First In First Out) Queue는 멀티 태스킹을 위한 프로세스 스케줄링 방식을 구현하기 위해 많이 사용된다 (운영체제) Enqueue : 큐에 데이터를 넣는 기능 Dequeue : 큐에서 데이터를
tttto-factory.tistory.com
풀이 코드
import sys
N = int(sys.stdin.readline())
queue = []
for _ in range(N):
order = sys.stdin.readline().split()
if order[0] == 'push':
queue.append(order[1])
elif order[0] == 'pop':
if len(queue) != 0:
print(queue[0])
queue.remove(queue[0])
else:
print(-1)
elif order[0] == 'size':
print(len(queue))
elif order[0] == 'empty':
if len(queue) == 0:
print(1)
else:
print(0)
elif order[0] == 'front':
if len(queue) != 0:
print(queue[0])
else:
print(-1)
elif order[0] == 'back':
if len(queue) != 0:
print(queue[-1])
else:
print(-1)
'코딩 테스트 > Python' 카테고리의 다른 글
[백준 코딩테스트(Python)] - 108660번 덱 (1) | 2022.11.24 |
---|---|
[백준 코딩테스트(Python)] - 10828번 스택 (0) | 2022.11.23 |
[백준 코딩테스트(Python)] - 2609번 최대공약수와 최소공배수 (유클리드 호제법) (0) | 2022.11.15 |
[백준 코딩테스트(Python)] - 1259번 팰린드롬수 (0) | 2022.11.15 |
[백준 코딩테스트(Python)] 정렬 - 좌표 압축 (0) | 2022.10.26 |