[Python] Programmers lv2 - 더 맵게
2024. 2. 11. 11:31ㆍ알고리즘/문제풀이
[Python] Programmers lv2 - 더 맵게
코딩테스트 연습 - 더 맵게 | 프로그래머스 스쿨 (programmers.co.kr)
문제 설명
- 주어진 조건
- 음식의 스코빌 지수가 담긴 리스트
- 스코빌 지수의 최소 요구치
- 리스트 내의 모든 요소들이 해당 요구치를 넘어야 한다
- 풀이 아이디어(기존)
- 주어진 스코빌 지수 리스트를 heap에 넣어준다
- heap으로 들어가면 작은 순서대로 정렬이 되며 pop을 하는 경우에도 작은 순서대로 나오게 된다
- heap에서 두 개의 원소를 꺼내서 조건에 맞게 조립 후 총 조립 횟수의 cnt와 요구치를 넘었는지 확인한다
- 풀이 아이디어 ( 오답 후 조건 추가 - 문제를 다각도로 분석 및 조건 설정의 미숙함 존재 )
- 첫 번째 원소를 pop 하고 힙에 남아있는 원소가 있는지 체크하는 부분
- 해당 원소를 pop을 한다는 것은 리스트에 있는 원소가 요구치를 못 넘었다는 것
- 조건을 다시 살펴보면 요구치를 넘어야한다는 것이 아닌 요구치 이상이다.
- '이상' 조건이므로 요구치를 포함해서 결정해야한다
- while 반복문을 진행하기 이전에 처음부터 주어진 스코빌 리스트가 이미 요구치를 넘긴 경우
- while 이전에 사전에 첫 번째 원소를 확인하여 k를 넘겼는지 확인
- 첫 번째 원소를 pop 하고 힙에 남아있는 원소가 있는지 체크하는 부분
풀이 코드
import heapq
def solution(sco, k):
answer = -1
heap = []
for i in sco:
heapq.heappush(heap,i)
if heap[0] >= k: # 힙의 첫번째 원소를 확인하여 조건을 만족하였는지 확인
return 0
cnt = 0
while True:
opt1 = heapq.heappop(heap)
if not heap: # 더 이상 조합할 요소가 없다면
return -1 # 조건을 만족할 수 없으므로 -1 반환
opt2 = heapq.heappop(heap)
opt3 = opt1 + opt2 * 2
heapq.heappush(heap, opt3)
cnt += 1
if heap[0] >= k: # 힙의 최소 요소가 K 이상이면 조건 충족
return cnt
return answer # 모든 조합을 시도했지만 조건을 만족하지 못한 경우
'알고리즘 > 문제풀이' 카테고리의 다른 글
[Python] 프로그래머스 lv3 - 가장 먼 노드 (0) | 2024.02.08 |
---|---|
[Python] 프로그래머스 lv2 - 뉴스 클러스터링 (0) | 2024.02.01 |
[Python] 프로그래머스 lv2 (2019 카카오 개발자 겨울 인턴쉽) - 튜플 (0) | 2024.01.31 |
[Python] 프로그래머스 lv2 - 타겟 넘버 (1) | 2024.01.03 |
[Python] 프로그래머스 lv2 - 소수 찾기 (1) | 2024.01.03 |