본문 바로가기

Algorithm 문제 풀이/python

[python] 백준 10845번 큐

https://www.acmicpc.net/problem/10845

 

10845번: 큐

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

www.acmicpc.net

 

 

 


 

💻 코드

 

 

import sys
from collections import deque

input = sys.stdin.readline

n = int(input())
queue_list = deque([])

for _ in range(n):
    command = input()

    if 'push' in command:
        num = command[5:]
        queue_list.append(num)

    if 'pop' in command:
        if queue_list:
            print(queue_list.popleft(), end='')
        else:
            print(-1)

    if 'size' in command:
        print(len(queue_list))

    if 'empty' in command:
        if queue_list:
            print(0)
        else:
            print(1)

    if 'front' in command:
        if queue_list:
            print(queue_list[0], end='')
        else:
            print(-1)

    if 'back' in command:
        if queue_list:
            print(queue_list[-1], end='')
        else:
            print(-1)

 

 

 

 

📝 풀이

 

큐 (queue)

 

FIFO(First In First Out) 구조, 선입 선출

 


 

먼저 입력을 받는 시간을 줄이기 위해 sys.stdin.readline()을 input 대신 사용하였다. 그리고 queue_list를 만든 다음 입력을 받은 명령어에 따라 push, pop, empty 함수가 실행되도록 만들었다. 스택과 거의 같은데 데이터를 꺼내는 위치가 다르므로 pop 명령어 함수가 달라지게 된다. pop 명령어 함수를 작성할 때 리스트 관련 함수인 pop() 함수를 쓰면 안 된다. 그냥 pop() 함수는 리스트의 마지막 요소를 돌려주고 그 요소는 삭제하는 함수로 스택에 해당하기 때문이다. 리스트의 첫 번째 요소, 즉 가장 먼저 넣은 요소를 돌려주고 그 요소를 삭제하는 함수를 사용하려면 deque()를 사용해야 한다. 사용 방법은 다음과 같다.

 

 

1. collections 모듈의 deque를 import 하기

 

from collections import deque

 

deque는 double-ended queue의 약자로 데이터를 양방향에서 추가하고 제거할 수 있는 자료 구조이다.

 

 

 

2. 리스트 생성할 때 deque 함수 씌워주기

 

queue_list = deque([])

 

 

 

3. deque가 제공하는 popleft() 함수 사용하기

 

popleft(): 리스트의 첫 번째 요소를 돌려주고 그 요소를 삭제

 

print(queue_list.popleft(), end='')