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

☑️ 문제

프로그래머스 135808

☑️ 풀이

  1. 주어진 배열 score를 내림차순으로 정렬한 arr를 생성한다.
    1. 최대 이익을 얻을 수 있는 상자를 먼저 구하기 위해서 내림차순으로 정렬하였다.
  2. 인덱스 + 1이 m의 배수인 경우, arr[인덱스] * m을 하여 answer에 더한다.
//시간: 343.28ms
//메모리: 164MB

import java.util.*;

class Solution {
    public int solution(int k, int m, int[] score) {
        int answer = 0;

        Integer[] arr = Arrays.stream(score).boxed().toArray(Integer[]::new);
        Arrays.sort(arr, (a, b) -> b - a);

        for (int i = 0; i < arr.length; i++) {
            if ((i + 1) % m == 0 && i != 0) {
                answer += arr[i] * m;
            }
        }

        return answer;
    }
}

☑️ 문법 정리 - 배열 정렬하기

Arrays.sort()

  • 오름차순 정렬
int[] arr = new int[] {1, 2, 3, 1, 2, 3, 1};
Arrays.sort(arr); // 	[1, 1, 1, 2, 2, 3, 3]
  • 내림차순 정렬
    • 원시 타입(primitive type)은 정렬하지 못하기 때문에, Wrapper 클래스로 박싱해준 뒤, 정렬해주어야 한다.
int[] arr = new int[] {1, 2, 3, 1, 2, 3, 1};
Integer[] arr2 = Arrays.stream(arr).boxed().toArray(Integer[]::new);
  1. Collections.reverseOrder() 사용
Arrays.sort(arr2, Collections.reverseOrder());
  1. Comparator사용
Arrays.sort(arr, new Comparator<Integer>() {
    @Override
    public int compare (Integer a, Integer b) {
        return b.compareTo(a);
    }
});
  1. 람다식 사용
Arrays.sort(arr, (a, b) -> b - a);

© 2021. All rights reserved.

yaejinkong의 블로그