![[JavaScript] 과일 장수 [JavaScript] 과일 장수](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
문제
과일 장수가 사과 상자를 포장하고 있습니다.
사과는 상태에 따라 1점부터 k점까지의 점수로 분류하며, k점이 최상품의 사과이고 1점이 최하품의 사과입니다.
사과 한 상자의 가격은 다음과 같이 결정됩니다.
- 한 상자에 사과를 m개씩 담아 포장합니다.
- 상자에 담긴 사과 중 가장 낮은 점수가 p (1 ≤ p ≤ k)점인 경우, 사과 한 상자의 가격은 p * m 입니다.
과일 장수가 가능한 많은 사과를 팔았을 때, 얻을 수 있는 최대 이익을 계산하고자 합니다.
(사과는 상자 단위로만 판매하며, 남는 사과는 버립니다)
예를 들어, k=3, m=4, 사과 7개의 점수가 [1, 2, 3, 1, 2, 3, 1]이라면,
다음과 같이 [2, 3, 2, 3]으로 구성된 사과 상자 1개를 만들어 판매하여 최대 이익을 얻을 수 있습니다.
- (최저 사과 점수) x (한 상자에 담긴 사과 개수) x (상자의 개수) = 2 x 4 x 1 = 8
사과의 최대 점수 k, 한 상자에 들어가는 사과의 수 m, 사과들의 점수 score가 주어졌을 때,
과일 장수가 얻을 수 있는 최대 이익을 반환하는 함수를 완성해주세요.
예시
k | m | score | return |
3 | 4 | [1, 2, 3, 1, 2, 3, 1] | 8 |
4 | 3 | [4, 1, 2, 2, 4, 4, 4, 4, 1, 2, 4, 2] | 33 |
나의 풀이
function solution(k, m, score) {
let result = 0, i = 0;
const sorted = score.sort((a, b) => b - a);
while (i < score.length) {
if (score.length < m) break;
if (score[i+m-1]) result += score[i+m-1] * m;
i += m;
}
return result;
}
풀이 방법
1. 결과 값을 담을 변수를 score를 내림차순으로 정렬한 배열을 생성해준다.
function solution(k, m, score) {
// 1
let result = 0, i = 0;
const sorted = score.sort((a, b) => b - a);
}
2. 변수 i의 값이 score의 크기보다 커질 때까지 while() 문을 사용해서 결과 값 계산을 반복해준다.
2-1. 만약 상자에 담을 사과의 갯수(m)가 score의 크기보다 크다면 반복문을 종료하고 0을 리턴한다.
2-2. score[i+m-1]의 값이 있다면(남은 사과의 개수가 m개가 된다면) result에 계산한 값을 더해준다.
2-3. m개 이후의 첫 번째 값을 찾기위해 i에 m의 값을 더해준다.
function solution(k, m, score) {
let result = 0, i = 0;
const sorted = score.sort((a, b) => b - a);
// 2
while (i < score.length) {
// 2-1
if (score.length < m) break;
// 2-2
if (score[i+m-1]) result += score[i+m-1] * m;
// 2-3
i += m;
}
return result;
}
'🧬알고리즘 > Programmers' 카테고리의 다른 글
[JavaScript] 크기가 작은 부분 문자열 (2) | 2024.10.02 |
---|---|
[JavaScript] 기사단원의 무기 (1) | 2024.09.26 |
[JavaScript] 푸드 파이트 대회 (0) | 2024.09.24 |
[JavaScript] 숫자 문자열과 영단어 - 2021 카카오 채용연계형 인턴십 (2) | 2024.09.11 |
[JavaScript] 없는 숫자 더하기 (0) | 2024.09.10 |
댓글