일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 백준위
- 코테
- 백준
- python
- 싸피셜
- IT 동향
- 신문스크랩
- it 이슈
- KT
- 네트워크 관리사 2급
- 코딩테스트 연습
- 카카오
- 싸피
- 신문 스크랩
- 우테코
- it 뉴스
- 프로그래머스
- java 객체지향 프로그래밍
- 리얼클래스
- IT 트렌드
- 네트워크 관리사
- html
- SSAFYcial
- 네트워크 관리사 2급 실기
- 인앱결제
- Java
- 코딩테스트
- SSAFY 7기
- SSAFY
- 구글
Archives
- Today
- Total
개발자일걸요..?
더 맵게 본문
728x90
반응형
링크 : https://programmers.co.kr/learn/courses/30/lessons/42626
코딩테스트 연습 - 더 맵게
매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같
programmers.co.kr
(프로그래머스>코딩테스트 연습>힙(Heap)>더 맵게)
<문제>
매운 것을 좋아하는 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 합니다.
<내가 작성한 코드>
import heapq
def solution(scoville,K):
answer =0
scoville_heap = []
for item in scoville:
heapq.heappush(scoville_heap,item)
while(True):
temp = heapq.heappop(scoville_heap)
if(temp>=K):
break
else:
answer+=1
if(len(scoville_heap)>0):
temp2=heapq.heappop(scoville_heap)
heapq.heappush(scoville_heap,temp+temp2*2)
else:
return -1
return answer
<참고한 개념>
- heap : 모든 부모 노드가 자식보다 작거나 같은 값을 갖는 이진 트리(가장 작은 요소가 항상 루트인 heap[0]이다)
- heapq.heappush(heap, item) : 힙 불변성을 유지하면서, item 값을 heap으로 푸시합니다.
- heapq.heappop(heap) : 힙 불변성을 유지하면서, heap에서 가장 작은 항목을 팝하고 반환. 힙이 비어 있으면, IndexError가 발생
- heapq.heappushpop(heap, item) : 힙에 item을 푸시한 다음, heap에서 가장 작은 항목을 팝하고 반환
- heapq.heapify(x) : 리스트 x를 선형 시간으로 제자리에서 힙으로 변환
- heapq.heapreplace(heap, item) : heap에서 가장 작은 항목을 팝하고 반환하며, 새로운 item도 푸시, 힙 크기는 변경X, 힙이 비어 있으면, IndexError가 발생
- heapq.merge(*iterables, key=None, reverse=False) : 여러 정렬된 입력을 단일 정렬된 출력으로 병합
- heapq.nlargest(n, iterable, key=None) : iterable에 의해 정의된 데이터 집합에서 n 개의 가장 큰 요소로 구성된 리스트를 반환
- heapq.nsmallest(n, iterable, key=None) : iterable에 의해 정의된 데이터 집합에서 n 개의 가장 작은 요소로 구성된 리스트를 반환
반응형
'알고리즘코딩 > Programmers' 카테고리의 다른 글
JadenCase 문자열 만들기 (0) | 2021.08.06 |
---|---|
[1차]뉴스 클러스터링 (0) | 2021.08.05 |
전화번호 목록 (0) | 2021.08.01 |
구명보트 (0) | 2021.08.01 |
완주하지 못한 선수 (0) | 2021.07.27 |
Comments