import java.util.*;
class Solution {
public int solution(int k, int m, int[] score) {
int answer = 0;
List<Integer> arr = new ArrayList<>();
for (int i : score) {
arr.add(i);
}
//역순 정렬
Collections.sort(arr,Collections.reverseOrder());
//박스 개수 계산
int boxes = arr.size() / m;
for (int i = 1; i < boxes+1; i++) {
int boxLast = arr.get((i * m)-1);
answer += boxLast * m;
}
return answer;
}
}
ArrayList로 바꾼 뒤 역순으로 정렬했다.
그 다음 박스의 개수를 계산 해놓고,
for문으로 박스의 개수만큼 돌아가게 설정.
(박스가 0일 때는 for문이 돌아가지 않아, answer==0)
박스에 들어가는 가장 작은 과일의 값(arr.get(m-1))과 m을 곱하여 answer에 더해준다.
이것을 m번째마다 반복해야하니, (arr.get(m*i-1)) 이 된다.
List<Integer> arr = new ArrayList<>();
for (int i : score) {
arr.add(i);
}
Collections.sort(arr,Collections.reverseOrder());
while(arr.size()>=m) {
int boxLast=0;
int count=0;
for (int i=0;i<m;i++) {
if (!arr.isEmpty()) {
boxLast = arr.get(0);
arr.remove(0);
count++;
}
}
answer+=boxLast*count;
}
처음에는 while문을 이용했을 때, 시간이 초과되었다.
이제 슬슬 속도도 중요한 시점이 되어가는 것 같다.
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; i >= m; i -= m){
answer += score[i - m] * m;
}
return answer;
}
}
score를 오름차순으로 sorting 한뒤,
for문으로 돌리되, i의 시작을 score의 크기로 선언.
i를 m씩줄여나간다.
내 풀이와 개념은 비슷하나, 변환 없이 더 간결하게 풀었다.