2023 팀네이버 신입 공채 준비 (5) 프로그래머스 힙(Heap) & 정렬
오늘 한 리스트
- 프로그래머스 Heap 2 문제
- 프로그래머스 정렬 1 문제
프로그래머스 Heap 더 맵게
- 문제 유형 : Heap
스코빌 지수 파악 하기from heapq import heappop,heappush def solution(scoville, K): answer = 0 scoville=sorted(scoville) init_num=scoville[0] length=len(scoville) num=0 while init_num<K: num+=1 s1=heappop(scoville) s2=heappop(scoville) s3=s1+s2*2 heappush(scoville,s3) if len(scoville)!=1: init_num=scoville[0] else: break if num==length-1 and scoville[0]<K: return -1 return num
간단한 heapq를 이용해서 가장 낮은 숫자부터 검출해 scovile 지수를 구했다 올클!
다른 사람 풀이
from heapq import heapify, heappush, heappop
def solution(scoville, K):
heapify(scoville)
for i in range(1000000):
try:
heappush(scoville, heappop(scoville)+(heappop(scoville)*2))
if scoville[0] >= K: return i+1
except:
return -1
최적화 되어있는 코드이다. 깔끔하고 좋은 것 같다.
프로그래머스 Heap 이중우선순위큐
- 문제 유형 : Heap
연산을 처리하는 자료 구조 형태from heapq import heappop,nlargest def solution(operations): list_pop=[] answer=[] while operations: word=operations.pop(0) if word[0]=="I": list_pop.append(int(word[2:])) else: if list_pop: if int(word[2:])==-1: heappop(list_pop) elif int(word[2:])==1: list_pop=sorted([-k for k in list_pop]) heappop(list_pop) list_pop=sorted([-k for k in list_pop]) if not list_pop: answer=[0,0] return answer answer.append(heappop(list_pop)) list_pop=sorted([-k for k in list_pop]) answer.append(-heappop(list_pop)) return sorted(answer,reverse=True)
올클! 솔직하게 효율적인 코드는 아니지만 그래도 속도나 가독성 측면에서는 나쁘지 않다고 생각한다.
프로그래머스 정렬 K번째 수
- 문제 유형 : 정렬
command를 통해 몇번째 수를 찾는지 확인하는 일이다.def solution(array, commands): answer=[] for command in commands: answer.append(sorted(array[command[0]-1:command[1]])[command[2]-1]) return answer
올클! 간단해서 쉬웠다 ㅎㅎ
Leave a comment