코딩 테스트/Level 3
이중우선순위큐
컴닥
2020. 9. 11. 15:13
반응형
이중우선순위큐
힙(Heap)
2763명 완료
https://programmers.co.kr/learn/courses/30/lessons/42628
코딩테스트 연습 - 이중우선순위큐
programmers.co.kr
헉 단순히 min, max 내장함수로 통과..
레벨 3 수준이라면 효율성 평가 테스트 케이스가 있어야...
def solution(operations):
queue = []
for operation in operations:
op, data = operation.split(' ')
if op == 'I':
queue.append(int(data))
elif data == '1':
if queue:
queue.remove(max(queue))
elif data == '-1':
if queue:
queue.remove(min(queue))
return [max(queue), min(queue)] if queue else [0, 0]
테스트 1 〉 통과 (0.08ms, 11MB)
테스트 2 〉 통과 (0.07ms, 10.9MB)
테스트 3 〉 통과 (0.07ms, 10.9MB)
테스트 4 〉 통과 (0.05ms, 10.7MB)
테스트 5 〉 통과 (0.06ms, 10.9MB)
테스트 6 〉 통과 (0.08ms, 10.9MB)
조금 더 간략히...
def solution(operations):
queue = []
for operation in operations:
op, data = operation.split(' ')
if op == 'I':
queue.append(int(data))
elif data == '1' and queue:
queue.remove(max(queue))
elif queue:
queue.remove(min(queue))
return [max(queue), min(queue)] if queue else [0, 0]
bisect와 deque로..
from bisect import insort
from collections import deque
def solution(operations):
queue = deque()
for operation in operations:
op, data = operation.split(' ')
if op == 'I':
insort(queue, int(data))
elif data == '1' and queue:
queue.pop()
elif queue:
queue.popleft()
return [queue[-1], queue[0]] if queue else [0, 0]
테스트 1 〉 통과 (3.58ms, 10.5MB)
테스트 2 〉 통과 (2.17ms, 10.4MB)
테스트 3 〉 통과 (0.42ms, 10.3MB)
테스트 4 〉 통과 (0.44ms, 10.2MB)
테스트 5 〉 통과 (0.44ms, 10.4MB)
테스트 6 〉 통과 (0.43ms, 10.4MB)
반응형