Hoplin 2022. 1. 24. 12:53
반응형

URL : https://level.goorm.io/exam/43246/%ED%81%90-queue/quiz/1

 

구름LEVEL

코딩테스트에서 가장 높은 비중을 차지하는 알고리즘 문제를 제작하고 풀이할 수 있는 온라인 저지 서비스입니다. 기업에서 선호하는 C, C++, 파이썬(Python), 자바(Java), 자바스크립트(Javascript) 이

level.goorm.io

 

문제 조건들을 정리해보자

 

  • 큐는 최대 10개의 자료가 들어갈 수 있고, 10개를 넘으면 overflow를 출력한다
  • 큐가 비어있는 상태에서 Deque를 실행하면 underflow, 꽉 차있는 상태에서 Enque를 실행하면 overflow를 실행한다
  • 프로그래밍 언어에서 제공하는 라이브러리를 사용하지 않고 문제 푸는것을 권장한다.

입력 조건들을 정리해보자

  • 첫줄 입출력의 횟수를 입력한다
  • 인큐 디큐를 입력하고(d 또는 D 혹은 e 또는 E) d,e이외의 값이 들어오는 경우에는 큐의 상태를 출력하고 프로그램을 종료시킨다.

출력 조건들을 정리해보자

  • 입출력 횟수가 끝나거나 프로그램이 중간이 종료되면 큐의 최종상태를 출력한다

 

기본적인 큐를 구현하는 문제이다. 문제에서 라이브러리 사용하지 않는것을 권장했지만, 두가지 방법 모두 구현해 보도록 하겠다. 일반적인 구현 문제인 만큼, 정석적인 큐를 클래스로 구현해 보겠다.

< collections.deque를 활용해 구현하기 >

import sys
from typing import MutableSequence, Any
from collections import deque


class Queue(object):

    def __init__(self):
        # 문제에서 큐의 최대 용량을 10으로 지정함
        self.que = deque([],maxlen=10)

    def isEmpty(self):
        if not self.que:
            return "underflow"
        else:
            return False

    def isFull(self):
        if len(self.que) >= self.que.maxlen:
            return "overflow"
        else:
            return False

    def enque(self, value : int):
        check = self.isFull()
        if check:
            print(check)
        else:
            self.que.append(value)

    def deque(self):
        check = self.isEmpty()
        if check:
            print(check)
        else:
            self.que.popleft()
    
    def dump(self):
        print(*self.que,sep=" ")

if __name__ == "__main__":
    q = Queue()
    latest_command = ''
    result = []
    for _ in range(int(input())):
        inp = input()
        if inp.lower() == 'd':
            q.deque()
        elif inp.lower() == 'e':
            q.enque(int(input()))
        else:
            q.dump()
            exit()
    q.dump()

 

< 라이브러리 사용없이 구현하기 : 원형 큐로 구현하기 >

from os import sep
import sys
from typing import MutableSequence, Any
from collections import deque


class Queue(object):

    def __init__(self):
        # 문제에서 큐의 최대 용량을 10으로 지정함
        self.front = self.rear = 0
        # Maximum Capacity of Queue
        self.capacity = 10
        # Data count of Queue
        self.count = 0
        self.que = [None] * self.capacity


    def isEmpty(self):
        if self.count <= 0:
            return "underflow"
        else:
            pass

    def isFull(self):
        if self.count >= self.capacity:
            return "overflow"
        else:
            pass

    def enque(self, value : int):
        check = self.isFull()
        if check:
            print(check)
        else:
            self.que[self.rear] = value
            self.rear += 1
            self.count += 1
            if self.rear == self.capacity:
                self.rear == 0

    def deque(self):
        check = self.isEmpty()
        if check:
            print(check)
        else:
            self.front += 1
            self.count -= 1
            if self.count == self.capacity:
                self.front == 0
    
    def dump(self):
        q = []
        for i in range(self.count):
            q.append(self.que[(self.front + i) % self.capacity])
        print(*q,sep=' ')

if __name__ == "__main__":
    q = Queue()
    latest_command = ''
    result = []
    for _ in range(int(input())):
        inp = input()
        if inp.lower() == 'd':
            q.deque()
        elif inp.lower() == 'e':
            q.enque(int(input()))
        else:
            q.dump()
            exit()
    q.dump()

 

반응형