happy318
팽도리블로그
happy318
전체 방문자
오늘
어제
  • 전체글 (252)
    • 공부 (5)
      • Algorithm 정리 (0)
      • 논문리뷰 (1)
      • C++ (2)
      • Python (2)
      • Java (0)
      • Back-end (0)
      • Front-end (0)
      • Embedded (0)
    • 코딩테스트 (218)
      • Python 문제풀이 (100)
      • C++ 문제풀이 (108)
      • Python template (9)
      • C++ template (1)
    • 일상 (20)
      • 맛집 (13)
      • 쇼핑 (5)
      • 아무 일상 (2)
    • 게임 (9)
      • 메이플스토리 (9)

최근 글

인기 글

hELLO · Designed By 정상우.
happy318

팽도리블로그

코딩테스트/Python 문제풀이

[프로그래머스] 더 맵게

2022. 6. 14. 15:47

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

 

코딩테스트 연습 - 더 맵게

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

programmers.co.kr

heap을 이용하는 문제입니다.

 

우선 문제부터 간단하게 요약해보면, 

 

매번 매운음식의 array 안에서 가장 덜매운 음식과, 두번째로 덜매운 음식을 꺼내서 

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

다음과 같이 섞은후 다시 넣어주는 과정을 반복해 모든 음식이 일정량 보다 매워질 때 까지 걸리는 섞는 횟수를 구하는 문제입니다. 

 

<Solution>

heapq 모듈을 이용하여 내부적으로 자동정렬이 되도록 해서 매번 새로운 음식을 만들어 넣어주는 형태로 구현하였습니다. 

만들수 없는 경우에 -1을 return해야 하는 경우만 신경써서 코딩을 해주면 됩니다.

실제 구현은 아래와 같습니다.

import heapq

def solution(scoville, K):
    heap = []
    for _ in range(len(scoville)):
        heapq.heappush(heap,scoville.pop())
    
    answer = 0
    while(heap):
        e = heapq.heappop(heap)
        if e >= K:
            break
        else:
            if len(heap) == 0:
                return -1
            answer+=1
            heapq.heappush(heap,e+(2*heapq.heappop(heap)))

    return answer

 

반응형

'코딩테스트 > Python 문제풀이' 카테고리의 다른 글

[프로그래머스] 이중우선순위큐  (0) 2022.06.15
[프로그래머스] 가장 먼 노드  (0) 2022.06.14
[프로그래머스] 카펫  (0) 2022.06.14
[프로그래머스] K번째수  (0) 2022.06.14
[프로그래머스] 디스크 컨트롤러  (0) 2022.06.14
    '코딩테스트/Python 문제풀이' 카테고리의 다른 글
    • [프로그래머스] 이중우선순위큐
    • [프로그래머스] 가장 먼 노드
    • [프로그래머스] 카펫
    • [프로그래머스] K번째수
    happy318
    happy318

    티스토리툴바