Algorithm/CodingTest

[Programmers] 과일 장수(Java)

누구세연 2024. 1. 12. 19:18

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

 

프로그래머스

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

programmers.co.kr

 

과일 장수라는 문제 Java로 풀이하겠습니다.

이 문제는 과일 장수가 판매하는 사과에 대한 최대 이익을 계산하는 문제입니다.

주어진 조건은 다음과 같습니다.

  1. 사과는 1점부터 k점까지 점수로 분류됩니다.
    여기서는 최상품의 사과의 점수입니다.
  2. 사과를 m 개씩 담아 상자에 판매하며, 각 상자의 가격은 상자에 들어있는 사과 중 최저 점수 p에 따라 결정됩니다.
    따라서 한 상자의 가격은 p*m이 됩니다.
  3. 과일 장수는 가능한 많은 사과를 팔아 최대 이익을 얻고자 합니다.
    상자 단위로만 판매하며, 남는 사과는 버립니다.

 

저는 다음과 같이 풀이하였습니다.

import java.util.Arrays;

class Solution {
    public int solution(int k, int m, int[] score) {
        Arrays.sort(score);

        int totalProfit = 0;
        int boxCount = score.length;
        while (boxCount - m >= 0) {
            boxCount -= m;
            int minScore = score[boxCount];
            totalProfit += minScore * m;
        }

        return totalProfit;
    }
}
  1. 주어진 사과의 배열을 오름차순으로 정렬합니다.
  2. 상자 단위로 사과를 판매하는 루프를 시작합니다.
    현재 상자에 담길 m개의 사과를 제외하고 남은 사과의 개수를 업데이트합니다.
    그리고 상자에 들어간 사과 중 가장 작은 점수를 찾아 이익을 계산하고 총이익에 더합니다.
  3. 최종적으로 계산된 총이익을 반환합니다.

 

 

 

이견이 있으시다면 자유롭게 댓글 남겨주세요.