오뚝이개발자

이중우선순위큐 본문

코딩 테스트/프로그래머스

이중우선순위큐

땅어 2020. 9. 16. 15:53
728x90
300x250

문제설명


제한사항

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

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

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

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


입출력 예


입출력 예에 대한 설명

16을 삽입 후 최댓값을 삭제합니다. 비어있으므로 [0,0]을 반환합니다.
7,5,-5를 삽입 후 최솟값을 삭제합니다. 최대값 7, 최소값 5를 반환합니다.


풀이

굳이 힙을 사용하지 않고도 풀 수 있다. 구현이 중심인 문제이기에 문제의 조건에 따라 if문을 적절히 사용하여 구현하면 된다.

def solution(operations):
    answer = []
    q = []
    for op in operations:
        instruction, number = op.split()[0],int(op.split()[1])
        if instruction == "I":
            q.append(number)
            
        elif instruction == "D":
            if len(q)==0:
                continue
            # 최댓값 삭제
            if number == 1:
                q = q[:-1]
            # 최솟값 삭제
            elif number == -1:
                q = q[1:]
        
        q.sort()
    if len(q)==0:
        answer = [0,0]
    else:
        answer.append(q[-1])
        answer.append(q[0])
    return answer

 

728x90
300x250

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

섬 연결하기  (0) 2020.09.20
가장 긴 팰린드롬  (0) 2020.09.18
단속카메라  (0) 2020.09.12
N으로 표현  (0) 2020.09.11
네트워크  (0) 2020.09.09
Comments