문제 설명 및 제한사항
아이디어 및 해결 방법
코드
from collections import Counter
def solution(picks, minerals):
# 캘 수 있는 광물만 남깁니다.
if len(minerals) > 5 * sum(picks):
minerals = minerals[:5 * sum(picks)]
# minerals를 5개씩 끊어서 광물의 개수로 요약합니다: (#다이아, #철, #돌)
summary = []
for i in range(0, len(minerals), 5):
cnt = Counter(minerals[i:i+5])
summary.append((cnt['diamond'], cnt['iron'], cnt['stone']))
# 다이아가 많은 순서대로 정렬합니다.
summary.sort(reverse=True)
print(summary)
# 앞에서부터 좋은 곡괭이로 greedy하게 처리합니다.
answer = 0
for n_dia, n_iron, n_stone in summary:
if picks[0] > 0: # 다이아 곡괭이가 있으면
answer += n_dia * 1 + n_iron * 1 + n_stone * 1
picks[0] -= 1
elif picks[1] > 0: # 철 곡괭이가 있으면
answer += n_dia * 5 + n_iron * 1 + n_stone * 1
picks[1] -= 1
else:
answer += n_dia * 25 + n_iron * 5 + n_stone * 1
picks[2] -= 1
return answer
Python
복사
출처
프로그래머스 코딩테스트 연습 https://school.programmers.co.kr/learn/challenges