본문 바로가기

개발공부/코테

[백준 10845: 큐] 파이썬 풀이


문제

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

명령은 총 여섯 가지이다.

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

입력

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

출력

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

 


풀이

from collections import deque
import sys
input = sys.stdin.readline

n = int(input()) #주어지는 명령의 수 n
queue = deque([])

for _ in range(n):
  a = str(input()).rstrip() #개행문자 제거해서 입력
  if a == "pop": #pop
    if(len(queue) == 0):
      print(-1)
    else:
      print(queue.popleft())
  elif a == "size": #size
    print(len(queue))
  elif a == "empty": #empty
    if(len(queue) == 0):
      print(1)
    else:
      print(0)
  elif a == "front": #front
    if(len(queue) == 0):
      print(-1)
    else:
      print(queue[0])
  elif a == "back": #back
    if(len(queue) == 0):
      print(-1)
    else:
      print(queue[len(queue)-1])
  else: #push x
    a, num = a.split()
    queue.append(num)

 

  • queue를 만들고, for문을 n번 돌면서 주어지는 입력(명령)에 따라 맞는 결과를 출력하는 형태
  • a값을 입력으로 받고 a = str(input()).rstrip() a가 pop인지, size인지, empty인지 .. if문으로 구별
  • else로 push x 형태 처리 

pop

 if a == "pop": #pop
    if(len(queue) == 0):
      print(-1)
    else:
      print(queue.popleft())

 

  • len(queue)가 0이라면 큐에 들어있는 정수가 없는 것이므로 -1 출력
  • 그렇지 않다면 popleft()로 큐의 가장 앞에 있는 정수를 뺀다

size

elif a == "size": #size
    print(len(queue))

 

  • 큐에 들어 있는 정수의 개수 줄력 : len(queue)

empty

elif a == "empty": #empty
    if(len(queue) == 0):
      print(1)
    else:
      print(0)

 

  • len(queue) 가 0이라면 큐가 비어있는 것이므로 1 출력, 그렇지 않다면 0 출력

front

  elif a == "front": #front
    if(len(queue) == 0):
      print(-1)
    else:
      print(queue[0])

 

  • 큐의 가장 앞에 있는 정수 queue[0] 출력
  • len(queue) 가 0이라면 큐가 비어있는 것이므로 -1 출력

pop

 elif a == "back": #back
    if(len(queue) == 0):
      print(-1)
    else:
      print(queue[len(queue)-1])

 

  • 큐의 가장 뒤에 있는 정수 queue[len(queue)-1] 출력
  • len(queue) 가 0이라면 큐가 비어있는 것이므로 -1 출력

push X

  else: #push x
    a, num = a.split()
    queue.append(num)

 

  • 정수 x를 num으로 받아서 queue에 append

[저번에 풀었던 스택 문제와 비교]

import sys
input = sys.stdin.readline

n = int(input()) #주어지는 명령의 수 n
stack = []

for _ in range(n):
  a = str(input()).rstrip() #개행문자 제거해서 입력
  if a == "pop":
    if(len(stack) == 0):
      print(-1)
    else:
      print(stack.pop())
  elif a == "size":
    print(len(stack))
  elif a == "empty":
    if(len(stack) == 0):
      print(1)
    else:
      print(0)
  elif a == "top":
    if(len(stack) == 0):
      print(-1)
    else:
      print(stack[len(stack)-1])
  else:
    a, num = a.split()
    stack.append(num)