데이터 저장소

[프로그래머스] 더 맵게 (Python) 본문

알고리즘/코딩테스트 연습

[프로그래머스] 더 맵게 (Python)

im_sso 2023. 12. 22. 00:48

https://school.programmers.co.kr/learn/courses/30/lessons/42626

 

프로그래머스

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

programmers.co.kr

📄문제

📝 코드

import heapq 

def solution(scoville, K):
    cnt = 0
    
    # 정렬
    scoville.sort()
    
    hq = []
    
    # 힙큐에 스코빌 점수 넣기
    for val in scoville:
        heapq.heappush(hq,val)
    
    # 첫 요소가 적정 스코빌을 만족하지 않는다면,
    while hq[0] < K :
        s1 = heapq.heappop(hq) # 첫번째 요소
        s2 = heapq.heappop(hq) # 두번째 요소
        
        heapq.heappush(hq, s1+s2*2) # 새로운 음식
        cnt += 1
        
        # 스코빌 지수 만족 못하는 경우
        if len(hq) == 1 and hq[0] < K :
            return -1
        
    return cnt
  • 리스트 형식으로 접근하면 시간초과 
  • 스코빌 지수가 정렬되어 있다는 조건이 없으니 정렬 필요
  • heapq를 사용해야함
    • 삽입 
      heapq.heappush(리스트변수, 데이터)
    • 삭제(가장 앞에 있는 데이터)
      heapq.heappop(hq)

시간 초과 코드

import heapq

def solution(scoville, K):
    scoville.sort()
    hq = []
    for i in scoville:
        heapq.heappush(hq, i)

    cnt = 0
    while hq[0] < K:
        s1 = scoville.pop(0)
        s2 = scoville.pop(0)
       
        scoville.append(s1 + s2*2)
        scoville.sort()
        cnt += 1
        
        if len(scoville) == 1 and scoville[0] < K:
            return -1
    return cnt
728x90