알고리즘/프로그래머스

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

2021. 1. 26. 17:00
728x90
반응형
 

문제 설명

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

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

제한 사항

-operations는 길이가 1 이상 1,000,000 이하인 문자열 배열입니다.

-operations의 원소는 큐가 수행할 연산을 나타냅니다.

-원소는 “명령어 데이터” 형식으로 주어집니다.- 최댓값/최솟값을 삭제하는 연산에서 최댓값/최솟값이 둘 이상인 경우, 하나만 삭제합니다.

-빈 큐에 데이터를 삭제하라는 연산이 주어질 경우, 해당 연산은 무시합니다.

입출력 예

operations

return

[I 16,D 1]

[0,0]

[I 7,I 5,I -5,D -1]

[7,5]

입출력 예 설명

16을 삽입 후 최댓값을 삭제합니다. 비어있으므로 [0,0]을 반환합니다.

7,5,-5를 삽입 후 최솟값을 삭제합니다. 최대값 7, 최소값 5를 반환합니다.

접근법

heapq를 사용하면 오름차순으로 정렬된 상태로 저장이 되므로, heapq를 사용하였습니다. 먼저 입력된 명령어를 ' '를 기준으로 잘라주고, command에 따라 처리를 해줍니다.heapq.nlargest(n,list)함수는 list에 있는 가장 큰 숫자를 순서대로 n개만큼 뽑아 리스트로 반환해주는 함수입니다. 반대로 heapq.nsmallest(n,list) 함수는 list에 있는 갖아 작은 수를 순서대로 n개만큼 뽑아 리스트로 반환해주는 함수입니다! 이를 사용하면 쉽게 구할 수 있습니다!

​

나의 코드

import heapq
def solution(operations):
    heap = []
    for operation in operations:
        command, num = operation.split(' ')
        if command == 'I':
            heapq.heappush(heap,int(num))
        elif command == 'D' and len(heap) > 0:
            if num == '1':
                heap.pop(heap.index(heapq.nlargest(1,heap)[0]))
            else:
                heapq.heappop(heap)
    if len(heap) == 0: return [0,0]
    return [heapq.nlargest(1,heap)[0],heapq.nsmallest(1,heap)[0]]

다른 코드

def solution(operations):
    heap = []
    for operation in operations:
        command, num = operation.split(' ')
        if command == 'I':
            heap.append(int(num))
        elif command == 'D' and len(heap) > 0:
            if num == '1':
                heap.pop()
            else:
                heap.pop(0)
        heap.sort()
    if len(heap) == 0: return [0,0]
    return [max(heap),min(heap)]
반응형

'알고리즘 > 프로그래머스' 카테고리의 다른 글

[프로그래머스] 여행경로  (0) 2021.01.26
[프로그래머스] 야근 지수  (0) 2021.01.26
[프로그래머스] 멀리 뛰기  (0) 2021.01.26
[프로그래머스] 단어 변환  (0) 2021.01.26
[프로그래머스] 2xn타일링  (0) 2021.01.26
'알고리즘/프로그래머스' 카테고리의 다른 글
  • [프로그래머스] 여행경로
  • [프로그래머스] 야근 지수
  • [프로그래머스] 멀리 뛰기
  • [프로그래머스] 단어 변환
컴공누나
컴공누나
ML 엔지니어 컴공누나입니다:) wodbs9522@gmail.com
컴공누나의 지식 보관소ML 엔지니어 컴공누나입니다:) wodbs9522@gmail.com
컴공누나
컴공누나의 지식 보관소
컴공누나
전체
오늘
어제
  • 분류 전체보기 (267)
    • 컴공누나 소개 (2)
    • 언어 마스터 (4)
      • 파이썬 (4)
    • 알고리즘 (159)
      • 프로그래머스 (120)
      • 백준알고리즘 (39)
      • 알고리즘기초 (0)
    • 인공지능공부 (62)
      • 인공지능기본지식 (6)
      • LLM (3)
      • 인공지능기초수학 (9)
      • 프레임워크 (2)
      • 자연어처리 (16)
      • 컴퓨터비전 (2)
      • 그래프 (24)
      • Prolog (0)
    • 다른 분야 (4)
      • Docker (1)
      • Web (3)
    • 논문 (10)
      • 논문리딩 (6)
      • 게제논문 (4)
    • 꿀팁 (19)
      • 오류 정리 (8)
      • 소소한 팁 (11)

블로그 메뉴

  • 홈
  • 태그
  • 글쓰기
  • 관리

공지사항

인기 글

태그

  • 자연어처리
  • 그래프
  • GPT
  • 백준
  • stanfordgnn
  • GNN
  • 영상기반상식추론
  • cs224w
  • 그래프신경망
  • selfattention
  • 프로그래머스
  • 파이썬
  • 그래프강의
  • stanfordgraph
  • Bert
  • nlp
  • 선형대수
  • transformer
  • 선형대수기초
  • 스탠포드그래프

최근 댓글

최근 글

글쓰기 / 관리자
hELLO · Designed By 정상우.
컴공누나
[프로그래머스] 이중우선순위큐
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.