[프로그래머스] 이중우선순위큐 파이썬

FFTL:)·2021년 5월 21일
0

이중우선순위큐 (https://programmers.co.kr/learn/courses/30/lessons/42628)

프로그래머스의 Level3 문제 중에 굉장히 쉬운 편이라고 생각했습니다. 문제에서 주어진 기능을 그대로 구현하면 문제를 해결할 수 있었습니다.

  • 입력받은 operations 의 값 들을 각각 받습니다.
  • 각각 받은 값을 공백을 기준으로 나누어 명령어, 숫자로 구분해 줍니다.
  • 명령어가 I 일 경우, D 일 경우에 따라서 분기시켜 줍니다.
  • I 일 경우 미리 만들어 놓은 queue에 값을 추가시켜 줍니다.
  • D 일 경우 1, -1 일 때에 따라서 최대 값 또는 최소 값을 제거해 줍니다.
def solution(operations):
    answer = [0, 0]
    queue = [] #미리 만들어 놓은 queue 
    
    for op in operations:
        inputs = op.split(" "); #공백을 기준으로 명령어 숫자를 구분,
        key = inputs[0];
        num = int(inputs[1]);
        
        if key == "I":		#명령어가 I일 경우 queue에 값 추가
            queue.append(num);
            queue.sort();	#사실 이름만 queue인 리스트라서 매번 직접 정렬을 해줍니다.
        
        else:			#명령어가 D일 경우
            if len(queue) == 0:	#queue가 비어있을 때에는 건너뜀
                continue;
            else:
                if num<0:	#명령어가 D이고 -1일 경우 최솟값 삭제
                    queue.pop(0);
                else:		#명령어가 D이고 1일 경우 최댓값 삭제
                    queue.pop();
    
    if len(queue) == 0:		#값이 하나도 존재하지 않을 경우 [0,0] 리턴
        return answer;
    
    answer[0] = queue[-1]; 	#아닐 경우 최대값 최소값을 입력해줌
    answer[1] = queue[0];
        
    return answer

=> 큐에 정렬기능이 추가된 우선순위 큐( 파이썬의 경우 PriorityQueue, heapq )를 사용할 경우 더 빠른 코드를 만들어 낼 수 있지만 이렇게 풀어도 속도 기준을 통과하였습니다.

profile
생각하는 개발자가 되자!

0개의 댓글