반응형
URL : https://level.goorm.io/exam/43246/%ED%81%90-queue/quiz/1
문제 조건들을 정리해보자
- 큐는 최대 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()
반응형
'CS 지식 > Algorithm-Problem Solving 정리' 카테고리의 다른 글
[프로그래머스] 프린터 (0) | 2022.01.24 |
---|---|
[백준] 2164 카드 2 (0) | 2022.01.24 |
[프로그래머스] 주식가격 (0) | 2022.01.18 |
[백준] 9012 번 괄호 (0) | 2022.01.18 |
[백준]10828 스택 (0) | 2022.01.18 |