Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 부등호
- 중첩
- 프로그래머스
- 가독성
- 2020 채용
- 그리디
- 커리어
- 조합
- 스택/큐
- 대소 비교
- deque
- 힙
- 함수화
- max-heap
- enumerate
- boolean
- min heap
- 임시 변수
- 함수
- 중첩문
- 파이썬
- 탈출 조건
- ZIP
- 변수명
- 매직 넘버
- 코딩테스트
- John Sonmez
- 중간 변수
- permutations
- 가이드
Archives
- Today
- Total
Better Code, Better Life
더 맵게 - 프로그래머스 - 파이썬 풀이 본문
문제 풀이
제일 안 매운 두 음식을 뽑아서 섞습니다.
이 프로세스를 모든 음식이 일정 기준(K)을 넘을 때까지 반복합니다.
만약 위의 방법이 실패하면 -1이 답입니다.
제일 안 매운 음식을 반복적으로 추출해야 하기 때문에
힙 구조를 이용해야 합니다.
학교에서는 주로 max-heap 을 배웠을텐데
여기서는 min 값을 지속적으로 이용해야 하기 때문에 min-heap을 이용합니다.
파이썬의 heapq 모듈은 기본적으로 min-heap입니다.
사용법은 help 키워드나 여기 링크를 참조하세요!
클린 코드 작성법
이번 문제는 클린 코드를 작성하기가 힘들었습니다.
실력자분이 나타나서 한 수 가르쳐줬으면 합니다.
- check_conditions을 통해 break를 하나만 씁니다.
- 탈출 조건이 하나여야 while문을 이해하기 쉽습니다.
- 조건문 판별을 위한 변수명으로 is + 동사나 has + 명사를 이용하면 좋습니다.
- 함수의 parameter은 2개 이하여야 합니다.
- OOP에서는 자신을 제외해서 1개 이하의 parameter을 가져야 합니다.
- 이 부분을 해결 못했습니다. 별도의 wrapper을 마련해 복잡성을 줄여야 합니다.
해답 코드
import heapq
def solution(scoville, K):
heapq.heapify(scoville)
mix_count = 0
while True:
food_one = heapq.heappop(scoville)
is_finished, mix_count = check_conditions(food_one, scoville, K, mix_count)
if is_finished:
break
mix_food(food_one, scoville)
mix_count += 1
return mix_count
def check_conditions(food_one, scoville, K, mix_count):
is_finished = False
if K <= food_one:
is_finished = True
has_no_food = not scoville
if has_no_food and not is_finished:
is_finished = True
mix_count = -1
return is_finished, mix_count
def mix_food(food_one, scoville):
food_two = heapq.heappop(scoville)
mixed_food = food_one + 2*food_two
heapq.heappush(scoville, mixed_food)
도움이 됐다면 공감버튼을 눌러주세요! 질문이 있다면 댓글 달아주세요!
코딩테스트 연습 - 더 맵게 | 프로그래머스
매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다. 섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2) Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다. Leo가 가진
programmers.co.kr
'Coding Test > Programmers' 카테고리의 다른 글
디스크 컨트롤러 - 프로그래머스 - 파이썬 풀이 (0) | 2019.08.13 |
---|---|
라면공장 - 프로그래머스 - 파이썬 풀이 (0) | 2019.08.07 |
주식가격 - 프로그래머스 - 파이썬 풀이 (0) | 2019.08.03 |
기능개발 - 프로그래머스 - 파이썬 풀이 (0) | 2019.08.01 |
다리를 지나는 트럭 - 프로그래머스 - 파이썬 풀이 (0) | 2019.07.30 |
Comments