[프로그래머스] 더 맵게

2025. 2. 2. 17:15·Problem Solving/프로그래머스 (Programmers)

🔗 문제 링크

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

📰 문제 요약

문제 설명, 입력, 출력, 조건 등 간략하게 정리

  • 모든 음식의 스코빌 지수 K 이상으로 만들기 위해, 스코빌 지수가 가장 낮은 두 개의 음식을 아래 방버으로 섞어 새로운 음식을 만든다.

섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번쨰로 맵지 않은 음식의 스코빌 지수 * 2)

  • 모든 음식이 K 이상이 될 때까지 반복하여 섞는다

입력

  • scoville : 모든 음식의 스코빌 지수를 담은 배열 (2 ≤ scoville의 길이 ≤ 1000000)
  • K : 원하는 스코빌 지수 (0 ≤ K ≤ 1000000000)

출력

  • 원하는 스코빌 지수를 위해 섞어야 하는 최소 횟수
  • 모든 음식을 만들 수 없는 경우에는 -1을 반환

🔓 문제 접근 방식

기본 아이디어

  • 코드 구성 자체는 간단하지만, 시간복잡도를 최소화하는 게 제일 중요하다고 생각했다.
  • 가장 작은 값 2개를 사용해야 하기 때문에 최소 힙을 사용
  • 또한 K를 달성했을 경우, pop을 통해 원소 삭제 해주는 과정 추가

사용 알고리즘

  • 힙 (heap)

💻 구현 방법

  1. scoville리스트를 haep으로 변환
  2. while문으로 새로운 음식 만들기 (모든 음식의 스코빌 지수가 K 이상이 되거나 더이상 섞을 음식이 없을 때까지)
  3. 새로운 방법으로 음식 만들기
  4. 새롭게 만든 음식의 스코빌 지수 추가
  5. 횟수 계산

👍🏻 최종 제출 코드

import heapq

def solution(scoville, K):
    answer = 0
    heapq.heapify(scoville) # scoville을 heap 형태로 변환
    while len(scoville) > 1 and scoville[0] < K:
        # 새로운 음식 만들기
        mix = heapq.heappop(scoville) + heapq.heappop(scoville) * 2
        # 새롭게 만든 음식의 스코빌 지수 추가
        heapq.heappush(scoville, mix)
        answer += 1 # 횟수 추가
    
    # 모든 음식의 스코빌 지수를 K 이상으로 만들 수 없는 경우 -1 반환
    if scoville[0] < K: 
        return -1
    return answer

📝 새로 학습한 내용

파이썬에서 힙 구현

heapq 모듈을 통해 최소 힙을 쉽게 구현할 수 있음

  • heapq.heappush(heap, item) : 힙에 새 값을 삽입
  • heapq.heappop(heap) : 힙에서 가장 작은 값을 제거하고 반환
  • heapq.heapify(list) : 리스트를 힙 구조로 변환

→ 또한 정직하게 heapq를 계속 쓸 필요 없이, import heapq as hq 를 활용하면 보다 간결하게 사용할 수 있다

저작자표시 (새창열림)

'Problem Solving > 프로그래머스 (Programmers)' 카테고리의 다른 글

[프로그래머스] 가장 큰 수  (0) 2025.02.02
[프로그래머스] K번째 수  (0) 2025.02.02
[프로그래머스] 기능개발  (0) 2025.01.19
[프로그래머스] 같은 숫자는 싫어  (0) 2025.01.18
[프로그래머스] 완주하지 못한 선수  (0) 2025.01.11
'Problem Solving/프로그래머스 (Programmers)' 카테고리의 다른 글
  • [프로그래머스] 가장 큰 수
  • [프로그래머스] K번째 수
  • [프로그래머스] 기능개발
  • [프로그래머스] 같은 숫자는 싫어
vV최강양파Vv
vV최강양파Vv
양파 갓생 살기 프로젝트
  • vV최강양파Vv
    just-stop
    vV최강양파Vv
  • 전체
    오늘
    어제
    • just-stopyoon (22)
      • Front-end (1)
        • mosAIc 리팩토링 (0)
        • React 리액트 (6)
        • SNAPINFO 리팩토링 (0)
      • BoostCamp (4)
      • Problem Solving (7)
        • 백준 (Baekjoon) (0)
        • 프로그래머스 (Programmers) (7)
      • ECONOMY (4)
        • Daily 금융 상식 (4)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

    • 멍청고양이
    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    깃허브
    해시
    the money book
    CSS
    독후감
    gihub
    코딩
    프로그래머스
    구름톤
    개발
    큐
    가장 큰수
    react
    react개발
    책 후기
    프론트엔드
    구름톤챌린지
    코드
    PS
    독서
    리액트
    코딩 문제
    파이썬
    토스
    front-end
    알고리즘
    금융상식
    코딩테스트
    정렬
    금융생활
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
vV최강양파Vv
[프로그래머스] 더 맵게
상단으로

티스토리툴바