일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스택/큐
- 부등호
- 대소 비교
- 그리디
- boolean
- 중첩문
- ZIP
- 임시 변수
- permutations
- deque
- max-heap
- 가이드
- min heap
- 매직 넘버
- 프로그래머스
- 힙
- 중첩
- enumerate
- 변수명
- 가독성
- John Sonmez
- 2020 채용
- 코딩테스트
- 커리어
- 조합
- 파이썬
- 중간 변수
- 함수
- 함수화
- 탈출 조건
- Today
- Total
Better Code, Better Life
라면공장 - 프로그래머스 - 파이썬 풀이 본문
문제 풀이
최대한 밀가루를 많이 공급해주는 해외 공장을 찾아야 합니다.
하지만 그 날까지 밀가루가 충분히 있어야 합니다.
버틸 수 있는 날 중에서 위 조건의 해외 공장을 찾아줍시다.
위 과정을 목표 수량에 달성할 때까지 반복합니다.
위 조건의 해외 공장을 찾으려면 max-heap 구조를 이용해야 합니다.
파이썬의 heapq 모듈은 기본적으로 min-heap이기 때문에
자료 값에 -1를 곱해주면 max-heap처럼 다룰 수 있습니다.
이후 최소값을 뽑으면 사실상 최대값이 뽑힙니다.
자료를 직접 다룰 때는 다시 -1를 곱해줍니다.
...
supplies = flip(supplies)
...
supply = supply_info[0]*(-1)
파이썬 heapq 모듈의 사용법은 help 키워드나 여기 링크를 참조하세요.
클린 코드 작성법
-
적절한 변수명을 붙여 문제의 이해도를 높입니다.
- stock -> start_stock
- k -> total_need_stock
-
문제 해결을 위해 중간 변수를 이용합니다.
- start_stock을 그대로 이용하기보다 새로운 변수(current_stock)를 활용합니다.
-
while문 내에 반복되는 프로세스를 함수화하여 중첩을 줄입니다.
- get_supply
해답 코드
import heapq
def solution(stock, dates, supplies, k):
start_stock = stock
total_need_stock = k
supplies = flip(supplies)
supply_info_list = list(zip(supplies, dates))
heapq.heapify(supply_info_list)
supply_count = 0
current_stock = start_stock
while True:
if total_need_stock <= current_stock:
break
supply_info = get_supply(current_stock, supply_info_list)
supply = supply_info[0]*(-1)
current_stock += supply
supply_count += 1
return supply_count
def flip(target):
flipped = list(map(lambda x: x*(-1), target))
return flipped
def get_supply(current_stock, supply_info_list):
supply_candidates = []
while True:
supply_candidate = heapq.heappop(supply_info_list)
supply_candidates.append(supply_candidate)
supply, date = supply_candidate
if date <= current_stock:
supply_info = supply_candidate
supply_candidates.pop()
break
for supply_candidate in supply_candidates:
heapq.heappush(supply_info_list, supply_candidate)
return supply_info
도움이 됐다면 공감버튼을 눌러주세요! 질문이 있다면 댓글 달아주세요!
코딩테스트 연습 - 라면공장 | 프로그래머스
라면 공장에서는 하루에 밀가루를 1톤씩 사용합니다. 원래 밀가루를 공급받던 공장의 고장으로 앞으로 k일 이후에야 밀가루를 공급받을 수 있기 때문에 해외 공장에서 밀가루를 수입해야 합니다. 해외 공장에서는 향후 밀가루를 공급할 수 있는 날짜와 수량을 알려주었고, 라면 공장에서는 운송비를 줄이기 위해 최소한의 횟수로 밀가루를 공급받고 싶습니다. 현재 공장에 남아있는 밀가루 수량 stock, 밀가루 공급 일정(dates)과 해당 시점에 공급 가능한 밀가루 수량
programmers.co.kr
'Coding Test > Programmers' 카테고리의 다른 글
이중우선순위큐 - 프로그래머스 - 파이썬 풀이 (0) | 2019.08.15 |
---|---|
디스크 컨트롤러 - 프로그래머스 - 파이썬 풀이 (0) | 2019.08.13 |
더 맵게 - 프로그래머스 - 파이썬 풀이 (0) | 2019.08.05 |
주식가격 - 프로그래머스 - 파이썬 풀이 (0) | 2019.08.03 |
기능개발 - 프로그래머스 - 파이썬 풀이 (0) | 2019.08.01 |