Algorithm/Java

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

dbfl9911 2025. 2. 3. 09:51
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/135808

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

📌 문제 요약

 

과일 장수가 사과를 m개씩 한 상자로 포장하여 판매할 때, 사과의 점수가 가장 낮은 점수를 기준으로 가격이 결정됩니다.
가능한 많은 사과를 판매하여 최대 이익을 구하는 문제입니다.


 

[ 정답 코드 & 풀이 ]

📌 풀이

  • 사과 점수 정렬
    사과의 점수를 오름차순으로 정렬합니다. (낮은 점수부터 높은 점수 순)
  • 한 상자씩 포장
    뒤에서 m개씩 그룹을 만들어 한 상자로 포장합니다.
    (이유: 낮은 점수를 기준으로 판매해야 하기 때문에, 높은 점수부터 m개씩 묶어 계산)
  • 최소 점수 기준으로 가격 계산
    한 상자에서 가장 낮은 점수 × m을 누적하여 최대 이익을 계산합니다.

 


📌 정답 코드

import java.util.*;

class Solution {
    public int solution(int k, int m, int[] score) {
        // 입출력 예 #1 
        // k = 3, m = 4, 사과 7개의 점수가 [1, 2, 3, 1, 2, 3, 1] 일때,
        // 1. [1, 1, 1, 2, 2, 3, 3]로 정렬
        // 2. [2, 2, 3, 3]로 자르고 해당 이익 계산
        // 인덱스 (score.length - m) ~ (score.length - 1) 까지
        // score[score.length - m] * m = 8
        // ==> 총이익 = 8
        // 입출력 예 #2
        // k = 4, m = 3, 사과 7개의 점수가 [4, 1, 2, 2, 4, 4, 4, 4, 1, 2, 4, 2]일때,
        // 1. [1,1,2,2,2,2,4,4,4,4,4,4]로 정렬
        // 2. [4,4,4]로 자르고 이익 계산 +
        //    [4,4,4]로 자르고 이익 계산 +
        //    [2,2,2]로 자르고 이익 계산 +
        //    [1,1,2]로 자르고 이익 계산 +
        //    ==> 총이익 = 33
        Arrays.sort(score); // [1, 1, 1, 2, 2, 3, 3]
        
        int answer = 0;
        for(int i = score.length - m; i >= 0; i-= m) {
            answer += score[i] * m;
        }
        
        return answer;
    }
}
반응형