과일 장수 (자바) v2

김재현·2024년 5월 1일
1

알고리즘 풀이

목록 보기
83/90
post-thumbnail

이전 포스팅: 과일 장수 (자바)

문제

정답 풀이

import java.util.*;

class Solution {
    public int solution(int k, int m, int[] score) {
        int answer = 0;
        
        Arrays.sort(score);
        
        for(int i=1;i<=score.length/m;i++) {
            answer += score[score.length-(m*i)] *m;
        }
        
        return answer;
    }
}

오름차순으로 정렬 하면 뒤에서부터 m개씩 짤랐을 때, 그 상자의 최소값이 나온다.

그래서 최소값에 m씩 곱해주면 끝.

개선 사항

이전 포스팅을 보니 AraayList로 변경 후 역순으로 정렬을 수행하여 내림차순으로 정리하였다.

         List<Integer> arr = new ArrayList<>();

        for (int i : score) {
            arr.add(i);
        }

		//역순 정렬
        Collections.sort(arr,Collections.reverseOrder());

하지만 이걸 한 줄로 바꿀 수 있다.

우선 Arrays.sort()로 오른차순으로 정렬한다.
그 뒤 이것을 List 형태로 바꾸어 Collections.reverseOrder()를 수행한다.
(배열이 아닌 List 형태이기 때문에 Collection. 이 되는 것.
)

Collections.reverseOrder(Arrays.asList(Arrays.sort(score)));

다시 보니 이것은 틀렸다.

Arrays.sort(score)는 void를 반환하고
Collections.reverseOrder()는 역순으로 정렬하는 Comparator를 반환한다.
Collections.reverse()가 있긴 하지만 void를 반환한다.

profile
I live in Seoul, Korea, Handsome

0개의 댓글