ye0nn
영차영차
ye0nn
전체 방문자
오늘
어제
  • 분류 전체보기 (61)
    • CS (0)
      • 운영체제 (0)
      • 네트워크 (0)
      • 알고리즘 & 자료구조 (0)
    • 코딩테스트 (48)
      • 프로그래머스 (40)
      • 백준 (8)
    • 프로그래밍 (11)
      • 프론트엔드 (3)
      • 자바스크립트 (0)
      • 스위프트 (7)
      • 파이썬 (1)
    • 취준기록 (1)

인기 글

블로그 메뉴

  • 홈
  • 태그
  • 방명록

티스토리

hELLO · Designed By 정상우.
ye0nn

영차영차

[프로그래머스] Level 2 - 더 맵게 (Python)
코딩테스트/프로그래머스

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

2022. 6. 3. 23:50

 

 

 

 

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

 

코딩테스트 연습 - 더 맵게

매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같

programmers.co.kr

 

 

 

 

✅ Solution

  • 가장 작은 값에 반복적으로 접근해야 하므로 heapq 모듈을 사용한다.
  • heapq의 heapify를 이용하여 scoville 배열을 최소 힙 자료구조로 변환한다.
  • 가장 작은 스코빌 지수가 k보다 작다는 조건을 이용하여 반복문을 돌린다. 
    • 반복문에서는 가장 작은 스코빌 지수와 두 번째로 작은 스코빌 지수를 heapq.heappop()을 이용해 구해 mix 변수에 할당하여, 다시 heappush()를 이용하여 넣어준다. 
    • 만약 스코빌 지수의 길이가 1이라면 스코빌 지수의 값을 모두 더해 한 개 원소가 남았는데, 그 원소가 k이상 되지 않는 것을 의미하기 때문에 -1을 리턴한다.

 

 

 

 

✅ Code

import heapq

def solution(scoville, K):
    answer = 0
    heapq.heapify(scoville)

    while scoville[0] < K:
        if len(scoville) == 1:
            return -1

        mix = heapq.heappop(scoville) + (heapq.heappop(scoville) * 2)
        heapq.heappush(scoville, mix)
        answer += 1

    return answer

 

 

 

 

📝 Today I Learned

heapq

  • heap이 heapq 배열이라고 할 때, heap[0] 은 최솟값을 의미하지만 heap[1], heap[2]의 경우 두 번째로 작은 원소, 세 번째로 작은 원소임을 보장하지 않는다.
  • heapq 모듈은 원소를 삭제할 때마다, 즉 heappop() 함수 호출 시에 이진트리 재배치가 이뤄지고, 이때 최솟값을 heapq[0]에 위치시키기 때문이다.
  • 따라서 두 번째, 세 번째 작은 원소를 구하기 위해서는 heappop()을 이용하여 첫 번째 원소에 접근하는 방식으로 구해야 한다.

 

 

 

저작자표시 (새창열림)

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[프로그래머스] Level 2 - 짝지어 제거하기 (Python)  (0) 2022.06.04
[프로그래머스] Level 2 - 타겟 넘버 (Python)  (0) 2022.06.04
[프로그래머스] Level 2 - 주차 요금 계산 (Python)  (0) 2022.05.24
[프로그래머스] Level 2 - 양궁대회 (Python)  (2) 2022.05.24
[프로그래머스] Level 2 - [3차] 압축 (Python)  (0) 2022.05.20
    '코딩테스트/프로그래머스' 카테고리의 다른 글
    • [프로그래머스] Level 2 - 짝지어 제거하기 (Python)
    • [프로그래머스] Level 2 - 타겟 넘버 (Python)
    • [프로그래머스] Level 2 - 주차 요금 계산 (Python)
    • [프로그래머스] Level 2 - 양궁대회 (Python)
    ye0nn
    ye0nn
    프론트엔드 개발자의 개발기록

    티스토리툴바