Search
Duplicate

광물 캐기

문제 설명 및 제한사항

아이디어 및 해결 방법

코드

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