isPowerfulBlog
[re-Solved] BOJ: 10845 | 큐 본문
처음부터 다시 공부하는 알고리즘 / 자료구조....
2년 전 코드
from collections import deque
import sys
input = sys.stdin.readline
N = int(input())
q = deque([])
def command(com_list, queue):
# push
if len(com_list) > 1:
if com_list[0] == 'push':
queue.append(int(com_list[1]))
# size, empty, pop, front, back
else:
if com_list[0] == 'pop':
if queue:
print(queue.popleft())
else:
print(-1)
elif com_list[0] == 'size':
print(len(queue))
elif com_list[0] == 'empty':
if queue:
print(0)
else:
print(1)
elif com_list[0] == 'front':
if queue:
print(queue[0])
else:
print(-1)
elif com_list[0] == 'back':
if queue:
print(queue[-1])
else:
print(-1)
return queue
for i in range(N):
com = list(input().split())
q = command(com, q)
- (good) sys.stdin.readline 써서 입력 속도 개선
- (bad) if, else 남발, 객체지향 X, 유지보수 어려운 코드, 가독성 구림
개선 코드
import sys
from collections import deque
input = sys.stdin.readline
class CustomQueue():
def __init__(self):
self.queue = deque([])
def push(self, item):
self.queue.append(item)
def pop(self):
if self.queue:
return self.queue.popleft()
else:
return -1
def size(self):
return len(self.queue)
def empty(self):
if not self.queue:
return 1
else:
return 0
def front(self):
if self.queue:
return self.queue[0]
else:
return -1
def back(self):
if self.queue:
return self.queue[-1]
else:
return -1
def operate(self, opt):
operators = {
'front': self.front,
'back': self.back,
'size': self.size,
'empty': self.empty,
'pop': self.pop
}
return operators[opt]()
if __name__=="__main__":
custom_queue = CustomQueue()
n = int(input())
for _ in range(n):
inputs = input().split()
if len(inputs) == 1:
opt = inputs[0]
sys.stdout.write(str(custom_queue.operate(opt)) + "\n")
else:
opt, item = inputs[0], int(inputs[1])
custom_queue.push(item)
- (good) sys.stdin.readline / sys.stdout.write 써서 입출력 속도 개선, 객체지향, 유지보수 및 가독성 개선
배운점 / 다시 상기한 점
- from collections import deque
- 일반적인 큐 / 스레드 안전 보장 X / 성능상 이점 -> 싱글스레드에서 활용
- append
- pop(우) / popleft(좌)
- 빠른 큐, 양방향 큐
- fromt queue import Queue
- 스레드 안전 보장 / 블로킹 지원 -> 멀티스레드에서 활용
- put
- get
- 안전한 큐
- 입출력
- input() = sys.stdin.readline()
- print() = sys.stdout.write( ... + "\n")
- 줄바꿈 안 해주니 반드시 추가하기
- string만 출력되니 반드시 str()입히기
'Algorithm' 카테고리의 다른 글
[re-Solved] BOJ: 10828 | 스택 (0) | 2024.12.10 |
---|---|
[re-Solved] BOJ: 9012 | 괄호 (0) | 2024.12.10 |
[Solved] BOJ: 2457 | 공주님의 정원 (2) | 2023.12.22 |
[자료구조] 큐, 스택, 힙 (1) | 2023.11.16 |
[Solved] BOJ: 11725 | 트리의 부모 찾기 (0) | 2023.02.02 |