문제 설명
매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다.
섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2)
Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다.Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록 solution 함수를 작성해주세요.
제한 사항
scoville의 길이는 2 이상 1,000,000 이하입니다.
K는 0 이상 1,000,000,000 이하입니다.
scoville의 원소는 각각 0 이상 1,000,000 이하입니다.
모든 음식의 스코빌 지수를 K 이상으로 만들 수 없는 경우에는 -1을 return 합니다.
해설
너무 어렵게 생각했다가 오래 걸려서 다른 사람 풀이를 봤다.
우선 heapq 모듈을 잘못 이해했는데, for문에 담아서 하나씩 넣어야하는 구조였다.
heapq(scoville)처럼은 변환은 안되었다.
heapq에 넣으면 자동으로 정렬이 된다. 이를 이용해서 밑에서 제일 작은수, 그 다음 작은수를 자동으로 뺄 수 있다.
while문으로 heap[0] < k 일 때만 조건문이 작동하도록 한다.
제일 작은수를 빼고 그다음 작은수를 빼서 해당 식을 계산한다.
그때를 += 1 한다.
그리고 그 결과값을 heappush한다.
그럼 자동으로 heapq 모듈이 정렬을 시켜줘서 제일 작은수라면 [0]번 위치로 가게 한다.
계속 작은수밖에 없어서 식을 반복하다보니 1개 요소밖에 안남고 마지막 1개 요소도 k보다 작으면 -1 리턴한다.
'코테공부' 카테고리의 다른 글
프로그래머스 49일차 - 큰 수 만들기 (0) | 2023.04.06 |
---|---|
프로그래머스 49일차 - 조이스틱 (0) | 2023.04.06 |
프로그래머스 48일차 - n^2 배열 자르기 (0) | 2023.04.05 |
프로그래머스 48일차 - 호텔 대실 (0) | 2023.04.05 |
프로그래머스 48일차 - 고양이와 개는 몇 마리 있을까 (0) | 2023.04.05 |