def solution(picks, minerals):
answer, mining = 0, {"diamond":[1,5,25], "iron":[1,1,5], "stone":[1,1,1]}
mineral_group_fatigue, minerals_len, extra_fatigue = [], len(minerals), []
minable = sum(picks) * 5
#print(minable)
minable_cnt = 0
# n번 group을 dia, iron, stone곡괭이로 채굴했을 때의 fatigue(피로도) 저장
fatigue = [0,0,0]
for i,mineral in enumerate(minerals, start = 1):
minable_cnt += 1
if minable_cnt > minable: break
fatigue[0] += mining[mineral][0]
fatigue[1] += mining[mineral][1]
fatigue[2] += mining[mineral][2]
if i % 5 == 0:
mineral_group_fatigue.append(fatigue)
fatigue = [0,0,0]
elif i == minerals_len:
extra_fatigue = fatigue
if len(extra_fatigue) != 0:
mineral_group_fatigue.append(extra_fatigue)
mineral_group_fatigue.sort(key=lambda x:x[2])
#print(mineral_group_fatigue, extra_fatigue)
# 각 곡괭이에 해당하는 각 광물의 피로도가 5배 이하인 것을 보니 ex) 1*5 <= 5, 5*5 <= 25
# 피로도가 높은 그룹을 좋은 곡괭이로 캐는것이 sol
for _ in range(picks[0]):
if len(mineral_group_fatigue) == 0: break
else:
picks[0] -= 1
answer += mineral_group_fatigue.pop()[0]
for _ in range(picks[1]):
if len(mineral_group_fatigue) == 0: break
else:
picks[1] -= 1
answer += mineral_group_fatigue.pop()[1]
for _ in range(picks[2]):
if len(mineral_group_fatigue) == 0: break
else:
picks[2] -= 1
answer += mineral_group_fatigue.pop()[2]
return answer
댓글