알고리즘

[파이썬] 단계별 백준 문제 풀기 - 18258번 큐 (큐 2)

햄❤️ 2021. 3. 16. 15:16
반응형

문제링크

 

18258번: 큐 2

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

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보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.

출력

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

 

<<소스코드>>

import sys
from collections import deque #deque모듈 삽입

def push(x):
    queue.append(x)
def pop(): #pop하기전에 queue가 비었는지 확인
    if not queue:
        return -1
    else:
        return(queue.popleft()) #뺀값을 그대로 출력. 위에 queue.popleft 썼다가 두번 빠짐
def size():
    return len(queue)
def empty(): #queue가 비지않았다면 1 출력, 비었다면 0 출력
    return 1 if not queue else 0
def front(): #queue에 무언가 있다면(=비지않았다면) 제일 앞의 값 출력
    return queue[0] if queue else -1
def back(): #queue에 무언가 있다면(=비지않았다면) 제일 뒤의 값 출력
    return queue[-1] if queue else -1

queue = deque() #deque 생성
n = int(sys.stdin.readline())
for _ in range(n):
    orders = sys.stdin.readline().rstrip()
    if orders.split()[0] == "push":
        push(orders.split()[1])
    elif orders == "pop":
        print(pop())
    elif orders == "size":
        print(size())
    elif orders == "empty":
        print(empty())
    elif orders == "front":
        print(front())
    elif orders == "back":
        print(back())

<<결과값>>

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

10828 스택 문제와 풀이 방식이 똑같았다. 다만 스택에서 deque를 이용한 것이 달랐다!

deque를 알면 어렵지 않게 풀 수 있다.

이 문제에서 살짝 실수했던 것은 pop을 할 때, deque에 값이 없다면 였고, pop의 popleft를 써야 맨 앞에 값을 빼준다는것. 

처음에 그냥 pop해서 다른값이 빠져서 당황했음

 

그리고 이번엔 3항연산자를 써보려고 노력했다.

어제 밤에 파이썬 기본 인강에서 3항연산자 부분이 나왔다. 간단한 조건들이라 한줄로 쓰는게 훨씬 깔끔해보인다!

처음엔 더 헷갈리는데? 했는데 계속 보니깐 더 직관적인것 같기두 하구?  앞으로도 계속 줄여서 쓰는 연습해야지

프로 숏코딩러가 될꺼야 ✦‿✦

def empty():
    return 1 if not queue else 0
def front():
    return queue[0] if queue else -1
def back():
    return queue[-1] if queue else -1
728x90
반응형