[프로그래머스/Python] 알고리즘고득점Kit-힙(Heap)-이중우선순위큐

2024. 10. 18. 16:08·코딩테스트/프로그래머스
728x90
반응형

📌 문제링크

https://school.programmers.co.kr/learn/courses/30/lessons/42628#

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📌 문제설명 

이중 우선순위 큐는 다음 연산을 할 수 있는 자료구조를 말합니다.


이중 우선순위 큐가 할 연산 operations가 매개변수로 주어질 때, 모든 연산을 처리한 후 큐가 비어있으면 [0,0] 비어있지 않으면 [최댓값, 최솟값]을 return 하도록 solution 함수를 구현해주세요.

 

# 제한사항

  • operations는 길이가 1 이상 1,000,000 이하인 문자열 배열입니다.
  • operations의 원소는 큐가 수행할 연산을 나타냅니다.
  • 원소는 “명령어 데이터” 형식으로 주어집니다.- 최댓값/최솟값을 삭제하는 연산에서 최댓값/최솟값이 둘 이상인 경우, 하나만 삭제합니다.
  • 빈 큐에 데이터를 삭제하라는 연산이 주어질 경우, 해당 연산은 무시합니다.

 

 

 

📌 풀이과정

  • 최소힙, 최대힙을 따로따로 만들 필요가 없다. 
  • 최소힙에서 최댓값을 구할 수 있기 때문 !! 
    • 처음에는 pop(-1)하고 heapify()를 하려 했다. 그런데 이 부분에서 에러가 나는 것 같아 heapq의 함수를 찾아보니 다음과 같은 함수가 있어 정리해보려 한다. 
    • heapq.nlargest(n, iterable, key=None) ==> 최소힙에서 최댓값을 구할 때 사용하기 좋을 것 같다. 
      heapq.nsmallest(n, iterable, key=None)

 

✅ 배운 점 

# heapq.nlargest() 함수 사용법 

  • n: 힙을 내림차순으로 정렬해 n개의 데이터를 리턴한다. 
  • iterable: heap 이름을 넣으면 된다. 
  • 기존의 힙은 변경하지 않는다. 변경된 힙은 리턴하기 때문에 반드시 = 로 받아줘야 한다. 

 

 

📌 풀이코드 

import heapq as hq
def solution(operations):
    answer = []
    for operation in operations: 
        op, v = operation.split()
        if op == "I":
            hq.heappush(answer, int(v))
        elif op == "D" and answer:
            if v == "1":
                answer = hq.nlargest(len(answer), answer)[1:]
                # answer.pop(-1)
                hq.heapify(answer)
            elif v == "-1": hq.heappop(answer)
        
    if answer: return [max(answer), min(answer)]
    else: return [0,0]
728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[프로그래머스/Python] Lv2. 숫자의 표현  (0) 2024.10.18
[프로그래머스/Python] 알고리즘고득점Kit-완전탐색-카펫  (0) 2024.10.18
[프로그래머스/Python] 알고리즘고득점Kit-스택/큐-주식가격  (6) 2024.10.18
[프로그래머스/Python] Lv2. 최솟값 만들기  (1) 2024.10.17
[프로그래머스/Python] Lv2. 최댓값과 최솟값  (1) 2024.10.17
'코딩테스트/프로그래머스' 카테고리의 다른 글
  • [프로그래머스/Python] Lv2. 숫자의 표현
  • [프로그래머스/Python] 알고리즘고득점Kit-완전탐색-카펫
  • [프로그래머스/Python] 알고리즘고득점Kit-스택/큐-주식가격
  • [프로그래머스/Python] Lv2. 최솟값 만들기
heeya16
heeya16
개발 공부 냠냠
  • heeya16
    개발자 희야
    heeya16
  • 전체
    오늘
    어제
    • 분류 전체보기 (106)
      • 코딩테스트 (66)
        • 프로그래머스 (38)
        • SWEA (2)
        • BAEKJOON (26)
      • 알고리즘 (7)
      • 자료구조 (19)
      • 프로젝트 (5)
      • 취업 주르륵 (3)
      • 데이터베이스 (0)
      • IT지식 (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    1003
    10448
    10773
    10월
    10진수
    11047
    11399
    11403
    11866
    1449
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
heeya16
[프로그래머스/Python] 알고리즘고득점Kit-힙(Heap)-이중우선순위큐
상단으로

티스토리툴바