Oops, All Code!/🤯 Oops, My Algorithm!
♡̈ 09. 프로그래머스:: 과일 장수
밍동망동
2024. 7. 10. 22:38
문제의 요는 사과를 어떻게 포장해야 최대 이익을 낼 수 있는가이다.
따라서, 높은 점수의 사과를 최대한 많이 포장해야 한다.
사과를 적절히 포장해 점수를 계산하고, 이익을 구해보기 위한 로직은 다음과 같다.
1. 사과 점수 배열을 내림차순으로 정렬한다.
2. 내림차순 사과를 m개씩 묶는다.
3. 가장 낮은 점수의 사과를 찾아 가격을 계산한다.
4. 모든 상자의 가격을 합한 최대 이익을 구한다.
function solution(k, m, score) {
score.sort((a, b) => b - a);
let maxProfit = 0;
for (let i = 0; i < score.length; i += m) {
if (i + m <= score.length) {
const box = score.slice(i, i + m);
const minScore = box[m - 1];
maxProfit += minScore * m;
}
}
return maxProfit;
}
해당 로직을 코드로 옮기면 다음과 같지만,
reduce 메서드도 사용해서 풀이해보았다.
reduce 사용
function solution(k, m, score) {
score.sort((a, b) => b - a);
return score.reduce((acc, _, i, arr) => {
if ((i + 1) % m === 0) {
acc += arr[i] * m;
}
return acc;
}, 0);
}
해당 문제는 다른 사람의 코드도 비슷한 유형인 것 같다.
여기서 더 짧아지면 가독성이 좋지 않아보인다.