본문 바로가기

Python/[백준] 문제 풀기

[18258] 큐 2

18258번: 큐 2
 
www.acmicpc.net

🤔 문제 설명

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

push X: 정수 X를 큐에 넣는 연산이다.

pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다. size: 큐에 들어있는 정수의 개수를 출력한다.

empty: 큐가 비어있으면 1, 아니면 0을 출력한다.

front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.

back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.

 

🤨 제한 사항

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

 

😀 입출력 예

입력 출력
15
push 1
push 1
front
back
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
front
1
2
2
0
1
2
-1
0
1
-1
0
3

 

👩‍🔧 사용 메서드 및 속성

sys.stdin.readline() 사용자로부터 한 줄의 입력을 받습니다.
split() 문자열을 나눠서 배열로 반환합니다.
append() 리스트 끝에 요소를 추가합니다.

from collections import deque

양방향 큐인 데크를 사용할 수 있습니다.

popleft()

데크 리스트의 맨 왼쪽 요소를 삭제하고 반환합니다.

 

👩‍🏫 어떻게 풀어요?

 

파이썬의 데크를 사용해 봅시다

 

이 문제를 통해 파이썬의 데크를 사용해 봅시다.

일반적인 큐는 선입 선출구조라서 양방향에서 삽입 삭제가 되지 않습니다. 왼쪽에서는 삽입, 오른쪽에서는 삭제가 이루어집니다.

 

하지만 데크는 양방향 큐이기 때문에 양방향에서 삽입 삭제를 수행할 수 있습니다.

 

 

 

 

 

 

 

👾트리스티의 답

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import sys
from collections import deque
 
def alg(wordArr) :
    if len(wordArr) == 2 :
        q.append(wordArr[1])
    else :
        if wordArr[0== 'pop' :
            if len(q) > 0 :
                print(q.popleft())
            else :
                print(-1)
        elif wordArr[0== 'size' :
            print(len(q))   
        elif wordArr[0== 'empty' :
            if len(q) > 0 :
                print(0)
            else :
                print(1)              
        elif wordArr[0== 'front' :
            if len(q) > 0 :
                print(q[0])
            else :
                print(-1)
        else :
            if len(q) > 0 :
                print(q[-1])
            else :
                print(-1)
 
= int(sys.stdin.readline().split()[0])
= deque()
 
for i in range(n) :
    x = list((sys.stdin.readline().split()))
    alg(x)
cs

 

※ 잘못된 정보가 있거나 수정사항이 있다면 댓글로 남겨주세요!

'Python > [백준] 문제 풀기' 카테고리의 다른 글

[15650] N과 M (2)  (0) 2021.03.18
[2667] 단지번호붙이기  (0) 2021.03.17
[2606] 바이러스  (0) 2021.03.17
[11054] 가장 긴 바이토닉 부분 수열  (0) 2021.03.17
[2884] 알람 시계  (0) 2021.03.14