반응형
풀이
곡괭이를 적절하게 골라 최소한의 피로도로 채광 작업을 마쳐야 한다.
앞에서부터 작업을 시작해야 하는데, 곡괭이 하나당 연속으로 5개씩 캐야 한다.
상위 등급의 곡괭이를 사용할 경우 최대한의 이득을 보도록 코드를 작성해야 한다.
이를 위해 곡괭이 종류별로 각 구간에 필요한 피로도를 기록하고, 하위 등급의 곡괭이를 사용할 때 필요한 피로도로 내림차순 정렬하면 가장 등급이 높은 곡괭이를 사용해야 이득이 많은 순으로 피로도 구간이 정렬된다.
def solution(picks, minerals):
# minerals 리스트를 5개씩 묶어 2차원 리스트로 반환
# 곡괭이를 모두 사용했는데 광물이 남아 있는 경우는 min 함수를 통해 제외
minerals = [list(minerals[i:i+5]) for i in range(0, min(sum(picks)*5, len(minerals)), 5)]
req = []
# 각 묶음에서 곡괭이별로 필요한 피로도를 계산하여 반환
for bundle in minerals:
tmp = [0,0,0]
for i in bundle:
tmp[0] += 1
tmp[1] += 5 if i == "diamond" else 1
tmp[2] += 25 if i == "diamond" else 5 if i == "iron" else 1
req.append(tmp)
# 낮은 등급의 곡괭이 점수를 기준으로 내림차순 정렬
req.sort(key=lambda x:(-x[2],-x[1]))
# 다이아몬드 곡괭이부터 순서대로 사용
ans = 0
for score in req:
if picks[0]:
ans += score[0]
picks[0] -= 1
elif picks[1]:
ans += score[1]
picks[1] -=1
elif picks[2]:
ans += score[2]
picks[2] -= 1
else:
break
return ans
반응형
'알고리즘 연습 > 그리디 알고리즘' 카테고리의 다른 글
[Lv.2 / 프로그래머스 / 파이썬] 마법의 엘리베이터 (0) | 2024.08.10 |
---|---|
[🥇5 / 백준 12904 / 파이썬] A와 B (2) | 2023.10.30 |
[🥈3 / 백준 25709 / 파이썬] 1 빼기 (0) | 2022.11.11 |
[🥈3 / 백준 1448 / 파이썬] 삼각형 만들기 (0) | 2022.06.23 |
[🥈4 / 백준 1343 / 파이썬] 폴리오미노 (0) | 2022.06.01 |