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;
}
}
반응형