코딩테스트

[프로그래머스] 과일 장수 (Kotlin)

깨비도 2024. 6. 18. 10:05

과일 장수

(중략)
사과의 최대 점수 k, 한 상자에 들어가는 사과의 수 m, 사과들의 점수 score가 주어졌을 때, 과일 장수가 얻을 수 있는 최대 이익을 return하는 solution 함수를 완성해주세요.

 

💡 풀이

class Solution {
    fun solution(k: Int, m: Int, score: IntArray): Int {
        var answer: Int = 0
        score.sortedDescending().chunked(m).forEach{
            // println(it)
            // case1: [3, 3, 2, 2], [1, 1, 1]
            // case2: [4, 4, 4], [4, 4, 4], [2, 2, 2], [2, 1, 1]
            if(it.size == m){
                answer += it.minOrNull()!! * m
            }
        }
        return answer
    }
}
  1. score를 내림차순으로 정렬해준다.
  2. chunked() 메소드로 m개씩 배열을 나누어준 뒤, forEach로 각 요소들을 순회한다.
    1. chunked() 메소드는 인자로 받은 값 m씩 나누어 리스트로 반환한다. 만약 총 요소 수가 m의 배수가 아닌 경우에는 마지막 chunked 목록에는 m보다 적은 요소로 반환된다.
  3. 만약 it의 길이가 m과 같으면 it 내부의 가장 작은 값과 m과 곱한 값을 누적하여 answer에 더해 반환하면 된다.

 

cf) 반복문 내부에 프린트를 찍으면 출력 초과로 실패 할 수 있으니 주석 처리 해주자!


오랜만에 내 생각을 최대한 발휘하여 문제를 풀었다. 매우 뿌듯~!!

다음 문제가 다시 어려워져서 조금 두렵지만 차근차근 성장해나가자.