ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 🤦‍♂️프로그래머스 이중 우선순위 큐(LV 3)🤦‍♂️
    알고리즘 2020. 8. 6. 19:06

     

    200717 아직 안 잠.


    명령어

    수신 탑(높이)

    I 숫자

    큐에 주어진 숫자를 삽입합니다.

    D 1

    큐에서 최댓값을 삭제합니다.

    D -1

    큐에서 최솟값을 삭제합니다.

     

     

    문제 설명

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

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

    제한사항

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

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

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

     

     

    첫 번째

    50점.

    heappush가 힙 구조 안에서 정렬이 됨 그래서 완벽하게 정렬이 되는 게 아니라서 틀림

    import heapq 
    # 최소힙 라이브러리 
    
    def solution(operations):
        answer = []
        h= []
        
        for i in operations:
            tmp=i.split(' ')
            if tmp[0]=='I':
                heapq.heappush(answer,-int(tmp[1]))
            else:
                if len(answer)!=0:
                    if tmp[1]=='-1':
                        answer.pop(-1)
                    else:
                        answer.pop(0)
        if len(answer)==0:
            answer=[0]*2
        else:
            for i in answer:
                answer.append(-answer.pop(0))
        h.append(max(answer))
        h.append(min(answer))
        return h

    성공

     

    import heapq 
    
    def solution(operations):
        answer = [] 
        h= [] # 정답 넣는 곳
        
        # 각 string 하나 씩 가져옴
        for i in operations:
            # 공백을 기준으로 리스트 만듦
            tmp=i.split(' ')
            # I 일 경우, 뒤에 숫자 값 넣음
            if tmp[0]=='I':
                # - 한 이유는 최소힙 이기때문에 큰 값이 앞으로 가라고.
                heapq.heappush(answer,-int(tmp[1]))
            else:
                # 아닐경우 일단, 조건에서 큐 안에 값이 없을 경우, 없애는 계산 무시하라고 해서 넣은 조건식
                if len(answer)!=0:
                    # 내림차순으로 정렬되어 있음
                    # -1 일경우 최솟값 빼기
                    if tmp[1]=='-1':
                        answer.pop(-1)
                    # 1일 경우 최댓값 빼기
                    else:
                        answer.pop(0)
             # 제대로 정렬해줌
            answer.sort()
        # 안에 값이 없을경우,  0 0 출력
        if len(answer)==0:
            return [0,0]
       	# 값이 있을경우 [최대, 최소]
        h.append(-min(answer))
        h.append(-max(answer))
        return h

     

     


    느낀 점

    여기는 이제 그냥 일기장

    비 왔으면 좋겠다

    공부 너무 안 해 나태해

    👊🏼👊🏼👊🏼👊🏼👊🏼

     

     

     

     

    댓글

Designed by Tistory.