문제 설명
사과 상자를 가장 최적화해서 포장하는 문제이다. k,m,score[] 변수가 주어지며, 1~k점까지의 점수가 있을 때, k점이 최상품, 1점이 최하품, 한 상자에 m개씩 담아 포장했을 때 얻을 수 있는 최대 이익(최저 사과 점수 * 한 상자에 담긴 사과 개수 * 상자의 개수)를 반환해주면 된다.
풀이
문제에서 변수로 주어지는 score[]에는 각각 점수로 표현된 사과가 담겨 있다. 최대 이익을 실현하려면 가장 높은 점수가 담긴 사과들부터 모아주면 된다. 그러기 위해 score을 내림차준으로 정렬하고 가능한 많은 상자로 쪼개어 result 변수에 저장한 다음 문제에서 주어진 최대 이익을 계산한 값을 answer라는 변수에 담아주어 반환하는 방식으로 코드를 작성하였다.
아래는 풀이에 사용한 코드이다.
function solution(k, m, score) {
var answer = 0; // 결과값을 반환할 변수
var result = []; // 상자를 m개씩 나눴을 때 저장해둘 임시 변수
// 예외 처리 - score의 길이가 m 보다 작거나 0보다 작으면 이익이 발생하지 않으므로 0반환
// score의 길이가 m이랑 같을 경우 경우의 수가 1가지이므로 계산 후 반환
if(score.length < m || score.length <= 0){
return 0
}else if(score.length === m){
answer = Math.min(score) * m
return answer
}
// score 내림차순 정렬
score.sort()
// m개만큼 개수를 나누는게 가능할때까지 반복 후 answer에 누적 저장
while(score.length >= m){
for(let i=0; i<m; i++){
result.push(score.pop())
}
answer += Math.min(...result) * m
result = []
}
return answer;
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.02 연습문제 영어 끝말잇기 (JavaScript) (0) | 2024.04.18 |
---|---|
[프로그래머스] Lv.02 연습문제 하노이의 탑 (JavaScript) (0) | 2024.04.15 |
[프로그래머스] Lv01 연습문제 약수의 개수와 덧셈 (JavaScript) (0) | 2024.04.14 |
[프로그래머스] Lv.01 연습문제 최소직사각형 (JavaScript) (0) | 2024.04.12 |
[프로그래머스] Lv.01 연습문제 바탕화면 정리 (JavaScript) (0) | 2024.04.08 |