1 minute read

오늘 한 리스트

  1. 프로그래머스 Heap 2 문제
  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
    

    올클! 간단해서 쉬웠다 ㅎㅎ

Categories:

Updated:

Leave a comment