본문 바로가기

About/Algorithm

[Programmers] 이중우선순위큐 (Python 풀이)

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

 

코딩테스트 연습 - 이중우선순위큐

 

programmers.co.kr


이 문제는 입력되는 명령어를 하나씩 읽어와 명령어의 동작대로 처리한다면 쉽게 풀 수 있는 문제입니다.

최댓값/최솟값을 삭제하는 연산에서 최댓값/최솟값이 둘 이상인 경우, 하나만 삭제합니다.라는 조건이 있어서 다음과 같이 처리했습니다.

# 최대, 최소인 값이 여러개인 경우에도 remove()는 하나의 원소만 삭제합니다.
answer.remove(max(answer))
answer.remove(min(answer))

 

소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def solution(operations):
    answer = []
 
    for command in operations:
        # 명령어를 공백을 기준으로 분리 ex) "D -1" -> "D", "-1"
        oper, num = command.split(" ")
        num = int(num) # string -> integer 변환
 
        if oper == "I"# Insert 명령인 경우 리스트에 추가
            answer.append(num)
        elif oper == "D" and num == 1 and answer: # D 1 명령어인 경우 리스트의 최대값 삭제
            answer.remove(max(answer)) 
        elif oper == "D" and num == -1 and answer: # D -1 명령어인 경우 리스트의 최솟값 삭제
            answer.remove(min(answer))
 
    if not answer: # 리스트에 아무 값이 없는 경우 answer = [0, 0]
        answer = [00]
    else# 리스트에 값이 있는 경우 answer = [최대값, 최솟값]
        answer = [max(answer), min(answer)]
    return answer
 
cs

 

실행 결과