코딩테스트
[프로그래머스] 과일 장수 (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
}
}
- score를 내림차순으로 정렬해준다.
- chunked() 메소드로 m개씩 배열을 나누어준 뒤, forEach로 각 요소들을 순회한다.
- chunked() 메소드는 인자로 받은 값 m씩 나누어 리스트로 반환한다. 만약 총 요소 수가 m의 배수가 아닌 경우에는 마지막 chunked 목록에는 m보다 적은 요소로 반환된다.
- 만약 it의 길이가 m과 같으면 it 내부의 가장 작은 값과 m과 곱한 값을 누적하여 answer에 더해 반환하면 된다.
cf) 반복문 내부에 프린트를 찍으면 출력 초과로 실패 할 수 있으니 주석 처리 해주자!
오랜만에 내 생각을 최대한 발휘하여 문제를 풀었다. 매우 뿌듯~!!
다음 문제가 다시 어려워져서 조금 두렵지만 차근차근 성장해나가자.
