본문 바로가기
프로그래머스/Python

[프로그래머스] 이중우선순위큐 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 7. 30.
728x90
반응형

 

 

프로그래머스

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

programmers.co.kr

 

1. 문제 설명

2. 풀이과정

  1. deque 자료구조를 사용하기 위해 deque 모듈을 불러온다. from collections import deque
  2. deque 자료구조를 사용해 큐를 생성한다. queue = deque()
  3. 문자열 배열을 하나씩 추출하며 for i in operations
  4. 문자열을 공백을 기준으로 분리하여 리스트로 저장한다. li = list(i.split())
  5. 만약 명령어가 I로 시작하면 if (li[0] == "I")
  6. 값을 정수로 큐에 추가한다. queue.append(int(li[1]))
  7. 반면에 명령어가 D로 시작하면 else
  8. 큐에서 원소를 삭제하는 건데 큐가 공백이 아닐 때만 가능하다. if (len(queue) != 0)
  9. 만약 값이 1이면 if (int(li[1]) == 1)
  10. 제일 뒤의 값(최댓값)을 삭제한다. queue.pop()
  11. 반면에 값에 -1이면 else
  12. 제일 앞의 값(최솟값)을 삭제한다. queue.popleft()
  13. 큐에서 값을 삭제할 때, 앞과 뒤에서 최솟값과 최댓값을 수월하게 삭제하기 위해 큐를 매명령어 수행 후마다 오름차순으로 정렬한다. queue = deque(sorted(queue))
  14. 모든 명령어를 완료하고 난 뒤, 큐가 공백이면 if (len(queue) == 0)
  15. 정답에 [0, 0]을 저장한다. answer = [0, 0]
  16. 반면에 큐가 공백이 아니라면 else
  17. 정답에 [최댓값, 최솟값]을 저장한다. answer = [max(queue), min(queue)]
반응형

3. 소스코드

from collections import deque

def solution(operations):
    answer = []
    
    queue = deque()
    for i in operations:
        li = list(i.split())
        if (li[0] == "I"):
            queue.append(int(li[1]))
        else:
            if (len(queue) != 0):
                if (int(li[1]) == 1):
                    queue.pop()
                else:
                    queue.popleft()
                    
        queue = deque(sorted(queue))
        
    if (len(queue) == 0):
        answer = [0, 0]
    else:
        answer = [max(queue), min(queue)]

    return answer
728x90
반응형