본문 바로가기
스터디/묘공단 자바 코딩테스트

[프로그래머스/Java] 6일차 코테 문풀 - Lv. 1 과일 장수

by 빙수야 팥빙수야 2024. 4. 21.

🔗 문제 링크

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

 

프로그래머스

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

programmers.co.kr

 

📝 문제 요약

과일 장수가 사과 상자를 포장 중입니다.

k점이 최상품 사과이고 1점이 최하점 사과입니다.

- 사과 한 상자 가격 결정 규칙

  • 한 상자에 사과를 m 개씩 담아 포장합니다.
  • 상자에 담긴 사과 중 가장 낮은 점수가 p (1 <= p <= k)점인 경우, 사과 한 상자 가격은 p * m입니다.

그리고, 사과는 상자 단위로만 판매하며, 남은 사과는 버립니다.

=> 위와 같은 규칙으로 최대 이익을 return 하는 함수를 완성해 주세요~!

사과의 최대 점수 k, 한 상자에 들어가는 사과의 수 m, 사과들의 점수 score가 주어집니다.

입출력 예

 

🔍 문제 풀이 (feat. 접근 방법)

최대 이익을 남기기 위해서는 사과 점수가 높은 것들로만 상자에 담아야 한다는 것을 기억!

=> sort() 정렬이 필요하다.

그러고 나서 상자의 개수만큼 for문을 돌면서

최저 사과 점수 X 한 상자에 담긴 사과 개수 X 상자의 개수 (for문 도는 횟수)

 

를 식으로 표현해 보자!! 생각보다 간단하잖아..? 괜히 어렵게 생각한....

 

👩🏻‍💻 전체 코드

import java.util.*;

class Solution {
    public int solution(int k, int m, int[] score) {
        int answer = 0;
		
        // 우선 score 배열을 정렬
        Arrays.sort(score);

	// 반복문을 통해 m개씩 담기는 상자 중 가장 작은 점수를 가진 사과에 접근하여 answer에 합치기
        for(int i = score.length - m; i >= 0; i -= m)
            answer += score[i] * m;

        return answer;
    }
}