본문 바로가기
Algorithms/백준

[백준_18258] 큐 2 with Python

by jeomn 2021. 5. 18.

백준(BOJ) 큐, 덱: 큐 2(실버 4)

문제 출처: https://www.acmicpc.net/problem/18258

 

18258번: 큐 2

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

www.acmicpc.net

 

1. 알고리즘

  • 정수 저장을 위한 큐를 deque 자료형으로 선언, 명령의 수 만큼 반복
  • 명령어를 받아 list 형식으로 받음
    • push 명령어의 경우 'push X'의 형태이기 때문에 X를 분리해 주기 위해서 list.
    • list의 0번 인덱스가 항상 명령어. 1번 인덱스는 push일 경우에만 존재.
  • push X: deque.append(X) 큐의 가장 뒤에 X 삽입
  • pop: try~except 구문으로 큐의 가장 앞에 있는 수를 빼고 그 수를 출력. 큐가 비어있을 경우 -1 출력
  • size: 큐의 길이를 출력
  • empty: 큐의 길이가 0이면 1, 0이 아니면 0을 출력
  • front: try~except 구문으로 큐의 가장 앞에 있는 정수를 출력. 큐가 비어있을 경우 -1 출력
  • back: try~except 구문으로 큐의 가장 뒤에 있는 정수를 출력. 큐가 비어있을 경우 -1 출력

 

2. 유의사항

 

 

3. 어려웠던 점, 해결방법

 

 

4. 소스 코드

상세 코드 설명은 주석

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
37
38
39
40
41
import sys
from collections import deque
 
 
input = sys.stdin.readline
if __name__ == '__main__':
    N = int(*map(int, input().split()))
 
    queue = deque()
    for _ in range(N):
        cmd = list(map(str, input().split()))
        
        #cmd 값에 따른 동작
        if cmd[0== 'push':
            queue.append(cmd[1])
 
        elif cmd[0== 'pop':
            try:
                pop_data = queue.popleft()
                print(pop_data)
            except:
                print(-1)
 
        elif cmd[0== 'size':
            print(len(queue))
 
        elif cmd[0== 'empty':
            print(1 if len(queue) == 0 else 0)
 
        elif cmd[0== 'front':
            try:
                print(queue[0])
            except:
                print(-1)
 
        elif cmd[0== 'back':
            try:
                print(queue[-1])
            except:
                print(-1)
 
cs

 

5. 고민

댓글