NIRVANA

[DAY-13] 백준 18258번 큐 2 본문

Coding test(Python3)/스터디

[DAY-13] 백준 18258번 큐 2

녜잉 2024. 5. 29. 00:45

1. 문제

정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 총 여섯 가지이다.

  • push X: 정수 X를 큐에 넣는 연산이다.
  • pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • size: 큐에 들어있는 정수의 개수를 출력한다.
  • empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
  • front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.

입력

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.

 

출력

출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.

 


 

2. 문제 풀이 방법

 

문제 풀이 접근법1

import sys
from collections import deque

N = int(sys.stdin.readline())

queue = deque([])

for i in range(N):
    
    order = sys.stdin.readline().strip().split()
    
    if order[0] == 'push':
        queue.append(order[1])
        
    elif order[0] == 'front':
        if not queue:
            print(-1)
        else:
            print(queue[0])
    elif order[0] == 'back':
        if not queue:
            print(-1)
        else:
            print(queue[-1])
    elif order[0] == 'size':
        print(len(queue))
    elif order[0] == 'empty':
        if not queue:
            print(1)
        else:
            print(0)
    elif order[0] == 'pop':
        if not queue:
            print(-1)
        else:
            print(queue.popleft())

 


 

3. 문제를 풀면서 배운거

dequeue

 

파이썬에는 deque(덱)이라는 앞 뒤로 요소를 추가하고 삭제할 수 있는 자료구조가 있다. 

해당 자료구조는 collections 라이브러리의 deque에 있음, rotate(), popleft() 등의 함수 사용이 가능하다.

 

from collections import deque

a = [1, 2, 3, 4, 5]

a = deque(a) #deque()함수를 사용하여 리스트 -> 덱으로 변경 가능

 

roate()함수 

a = deque([1, 2, 3, 4, 5])

a.rotate(1) #오른쪽으로 한칸씩 이동
#출력 deque[5, 1, 2, 3, 4]

a. rotate(-1) #왼쪽으로 한칸씩 이동
#출력 deque([2, 3, 4, 5, 1])

 

popleft()함수

제일 앞의 요소를 삭제하는 함수 

a = deque([1, 2, 3, 4, 5])
print(a)
#출력: deque([1, 2, 3, 4, 5])

a.popleft()
print(a)
#출력: deque([2, 3, 4, 5])

 

참고: https://yeomss.tistory.com/290

 

Python deque의 rotate(), popleft() 기능

collection의 deque rotate() 우선 deque(덱)은 앞 뒤로 요소를 추가하고 삭제할 수 있는 자료구조 입니다. 큐를 양쪽으로 이어붙인 느낌이라고 생각하시면 됩니다. 약간 손에 앞뒤 이동만 가능한 카드패

yeomss.tistory.com