https://school.programmers.co.kr/learn/courses/30/lessons/135808
사과를 가장 비싸게 팔 수 있는 경우는 최소값이 가장 높은 경우다.
그러므로 배열을 정렬해버리고, 앞에서 혹은 뒤에서 부터 팩사이즈(m)씩 끊어 계산한 뒤 누적하면 정답을 얻을 수 있다.
각 상자는 이미 정렬된 배열을 기반으로 만들어지므로
상자에서 가장 왼쪽에 있는 값이 p
가 되고, 이 값만 뽑아서 m
과 곱해준 값을 누적하면 된다.
참고로 기본 타입 배열이라서 리버스오더 쓰려면 별도 작업을 해야하므로 그냥 오름차순으로 하는게 낫다.
import java.util.*;
class Solution {
public int solution(int k, int m, int[] score) {
int answer = 0;
Arrays.sort(score);
for (int i=score.length - 1; i>=m - 1; i-=m) {
answer += score[i - m + 1] * m;
}
return answer;
}
}