[프로그래머스] 과일장수

AI·2025년 1월 2일
import java.util.Arrays;

class Solution {
    public int solution(int k, int m, int[] score) {
        int answer = 0;
        //내림차순 정렬 -> m개씩 빼서 그 값*m을 answer에 더함   
        for(int i=1;i<score.length;i++){
            for(int j=i;j>0 && score[j]>score[j-1];j--){
                int temp = score[j-1];
                score[j-1]=score[j];
                score[j] = temp;
            }
        }
        
        int index = 0;
        while(index+m<=score.length){
                answer += score[index + m-1]*m;
                index = index+m;   
        }

        return answer;
    }
}

로 삽입정렬로 하니 시간복잡도가 n^2이어서 시간초과가 난다. 그래서 Arrays.sort()를 활용해서 시간복잡도를 nlogn으로 해결을 하였다.
int는 reverse가 없어서 Interger형태로 변환 후 시행하였다.

Integer[] integerScore = Arrays.stream(score).boxed().toArray(Integer[]::new);
Arrays.sort(integerScore, Collections.reverseOrder());

굳이 바꾸지 않고 뒤에서부터 체크해서 하면 integerScore를 굳이 다시 만들 필요가 없다.

        Arrays.sort(score);

        for(int i = score.length; i >= m; i -= m){
            answer += score[i - m] * m;
        }

0개의 댓글