-
🤦♂️프로그래머스 이중 우선순위 큐(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
느낀 점
여기는 이제 그냥 일기장
비 왔으면 좋겠다
공부 너무 안 해 나태해
👊🏼👊🏼👊🏼👊🏼👊🏼
'알고리즘' 카테고리의 다른 글
프로그래머스 전화번호 목록(LV 2) (0) 2020.08.06 프로그래머스 카펫(Lv 2) (0) 2020.08.06 프로그래머스 큰 수 만들기(Lv2) (0) 2020.08.06 백준 바이러스(BFS, DFS) (0) 2020.08.06 프로그래머스 소수 찾기(LV2) (0) 2020.08.06