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
- John Sonmez
- permutations
- 중첩문
- boolean
- max-heap
- 부등호
- 대소 비교
- 함수
- 스택/큐
- 매직 넘버
- 중간 변수
- 파이썬
- 커리어
- 가독성
- 2020 채용
- 중첩
- enumerate
- deque
- 조합
- 코딩테스트
- 임시 변수
- 변수명
- 탈출 조건
- min heap
- 함수화
- 프로그래머스
- ZIP
- 그리디
- 힙
- 가이드
Archives
- 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
도움이 됐다면 공감버튼을 눌러주세요! 질문이 있다면 댓글 달아주세요!
'Coding Test > Programmers' 카테고리의 다른 글
이중우선순위큐 - 프로그래머스 - 파이썬 풀이 (0) | 2019.08.15 |
---|---|
디스크 컨트롤러 - 프로그래머스 - 파이썬 풀이 (0) | 2019.08.13 |
더 맵게 - 프로그래머스 - 파이썬 풀이 (0) | 2019.08.05 |
주식가격 - 프로그래머스 - 파이썬 풀이 (0) | 2019.08.03 |
기능개발 - 프로그래머스 - 파이썬 풀이 (0) | 2019.08.01 |
Comments