[Python - λ°±μ€€ 18258] 큐 2

2021. 1. 6. 01:48γ†πŸ“š Algorithm/πŸ’ͺ🏻 Python 문제 풀이

λ°˜μ‘ν˜•

 

 

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보닀 μž‘κ±°λ‚˜ κ°™λ‹€. λ¬Έμ œμ— λ‚˜μ™€μžˆμ§€ μ•Šμ€ λͺ…령이 μ£Όμ–΄μ§€λŠ” κ²½μš°λŠ” μ—†λ‹€.

좜λ ₯ν˜•μ‹

좜λ ₯ν•΄μ•Όν•˜λŠ” λͺ…령이 μ£Όμ–΄μ§ˆ λ•Œλ§ˆλ‹€, ν•œ 쀄에 ν•˜λ‚˜μ”© 좜λ ₯ν•œλ‹€.

 

풀이 κ³Όμ •

dequeλ₯Ό μ΄μš©ν•˜μ—¬ Queue 자료ꡬ쑰λ₯Ό κ΅¬ν˜„ν•΄λ³΄μ•˜λ‹€.

deque와 Queue에 λŒ€ν•œ μžλ£ŒλŠ” μ•„λž˜ ν¬μŠ€νŒ…μ„ μ°Έκ³ ν•˜λ©΄ 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€ : )

 

[Python 자료ꡬ쑰] Queue (큐) κ΅¬ν˜„ν•˜κΈ°

Queue(큐) ?! νλŠ” FIFO (First - In - First - Out) 둜써 λ¨Όμ € μ‚½μž…λœ item 순으둜 꺼내어진닀고 μ΄ν•΄ν•˜λ©΄ μ‰¬μšΈκ±° κ°™μŠ΅λ‹ˆλ‹€. 큐의 μ’…λ₯˜μ—λŠ” 순차적인 큐와 μ›ν˜• 큐(μ›ν˜•μœΌλ‘œ 이루어진 Queue)κ°€ μžˆμŠ΅λ‹ˆλ‹€. Python.

yunaaaas.tistory.com

from collections import deque
from sys import stdin


class queue(object):
    def __init__(self):
        self.q = deque()

    def push(self, item):
        self.q.append(item)

    def pop(self):
        if self.empty() != 1:
            return self.q.popleft()
        else:
            return -1

    def size(self):
        return len(self.q)

    def empty(self):
        if self.size() == 0:
            return 1
        else:
            return 0

    def front(self):
        if self.empty() != 1:
            return self.q[0]
        else:
            return -1

    def back(self):
        if self.empty() != 1:
            return self.q[-1]
        else:
            return -1


n = stdin.readline()
q = queue()
for _ in range(int(n)):
    run = list(stdin.readline().split())
    if run[0] == "push":
        q.push(int(run[1]))
    elif run[0] == "pop":
        print(q.pop())
    elif run[0] == "size":
        print(q.size())
    elif run[0] == "empty":
        print(q.empty())
    elif run[0] == "front":
        print(q.front())
    else:
        print(q.back())
λ°˜μ‘ν˜•