코딩 테스트/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)

 

반응형