과일 장수가 사과 상자를 포장하고 있습니다. 사과는 상태에 따라 1점부터 k점까지의 점수로 분류하며, k점이 최상품의 사과이고 1점이 최하품의 사과입니다. 사과 한 상자의 가격은 다음과 같이 결정됩니다.
예를 들어, k
= 3, m
= 4, 사과 7개의 점수가 [1, 2, 3, 1, 2, 3, 1]이라면, 다음과 같이 [2, 3, 2, 3]으로 구성된 사과 상자 1개를 만들어 판매하여 최대 이익을 얻을 수 있습니다.
사과의 최대 점수 k
, 한 상자에 들어가는 사과의 수 m
, 사과들의 점수 score
가 주어졌을 때, 과일 장수가 얻을 수 있는 최대 이익을 return하는 solution 함수를 완성해주세요.
fun solution(k: Int, m: Int, score: IntArray): Int {
var answer: Int = 0
var i = m-1
val score = score.sortedDescending().toMutableList()
while (i < score.size){
if (score[i] > k ) score[i] = k
answer += score[i] * m
i = i + m
}
return answer
}
score를 내림차순으로 받은후 상자의 마지막 사과 품질을 * m 해줬다
fun solution(k: Int, m: Int, score: IntArray): Int {
return score.sortedDescending()
.mapIndexed { i, v -> if (v > k) k
if (i % m == m - 1) v else 0 }.sum() * m
}
맵핑해서 상자의 제일 안좋은 품질의 사과 위치 index의 value는 그냥 냅두고
그 외의 것들은 전부 0 으로 만들었다
k를 입력받아서 k보다 좋은 품질의 사과도 들어오나 싶어 value가 k보다 크면 k로 변환시키는 조건문을 넣었는데
다시보니 제한사항으로 애초에 k보다 높은 품질을 사과를 넣을 순 없었다
fun solution(k: Int, m: Int, score: IntArray): Int {
return score.sortedDescending()
.mapIndexed { i, v -> if (i % m == m - 1) v else 0 }.sum() * m
}
저걸 뺴면 좀 더 깔끔하게 만들수 있었다