코딩테스트

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

어코링 2024. 2. 15. 12:33

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 문제설명

result
3 4 [1, 2, 3, 1, 2, 3, 1] 8
4 3 [4, 1, 2, 2, 4, 4, 4, 4, 1, 2, 4, 2] 33
입출력 예 설명
입출력 예 #1

문제의 예시와 같습니다.
입출력 예 #2

다음과 같이 사과 상자를 포장하여 모두 팔면 최대 이익을 낼 수 있습니다.
사과 상자 가격
[1, 1, 2] 1 x 3 = 3
[2, 2, 2] 2 x 3 = 6
[4, 4, 4] 4 x 3 = 12
[4, 4, 4] 4 x 3 = 12
따라서 (1 x 3 x 1) + (2 x 3 x 1) + (4 x 3 x 2) = 33을 return합니다.

2. 문제풀이

import java.util.*;

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

        // 주어진 배열을 오름차순으로 정렬
        Arrays.sort(score);

        // 배열의 뒤에서부터 m개씩 묶어서 판매
        for (int i = score.length - m; i >= 0; i -= m) {
            // 현재 팔릴 상자의 점수
            int boxScore = score[i];
            
            // 현재 팔릴 상자에 들어갈 사과 개수 (m개 또는 남은 사과 개수)
            int applesInBox = Math.min(m, score.length - i);

            // 현재 팔릴 상자의 이익을 누적
            answer += boxScore * applesInBox;
        }

        // 최종적인 이익을 반환
        return answer;
    }
}