[프로그래머스-Level 1] [JavaScript] 과일 장수 - 배열, 최솟값 이용
2022. 11. 28. 12:25ㆍ알고리즘/프로그래머스 알고리즘 공부
반응형
[문제]
사과 상자를 포장한다고 가정합니다. 사과는 상태에 따라 1점-k점까지의 점수로 분류되며 최상품의 사과가 k점수이고 1점이 최하품의 사과입니다. 한 상자에 사과를 m개씩 담아서 포장하며 상자에 담긴 사과 중에 가장 낮은 점수가 1이상 k이하라면 한 상자의 가격은 p 곱하기 m입니다. 상자 단위로만 포장해서 판매되며 남는 사과 즉 나머지는 버립니다. k가 3, m이 4라고 가정했을 때 [1,2,3,1,2,3,1] 이렇게 7개의 사과 점수가 주어지는 경우 [2,3,2,3] 이렇게 사과 상자를 1개를 만들어 판매할 수 있습니다. 즉 최종 결과는 (최저 사과 점수 * 한 상자에 있는 사과 개수 * 상자 개수) = 8이 됩니다. (2 * 4 * 1) = 8
[알고리즘]
정렬, 배열, Math.min 사용하여 최솟값을 구합니다.
[풀이]
먼저 sort 함수를 이용해 오름차순으로 정렬해주고, score 배열에 담겨진 요소들을 하나씩 box에 담아줍니다. m이 4일 경우에 한 박스당 4개의 사과가 들어가기 때문에 (i + 1) % m을 통해 4개씩 담아주면 됩니다. 담겨진 박스들에 다시 반복문을 돌려서 한 박스에 최소 점수를 Math.min 함수를 통해 얻어와서 상자개수를 곱해주면 됩니다.
function solution(k, m, score) {
let answer = 0;
const boxes = [];
// 배열 오름차순 정렬
score.sort((a, b) => b - a);
// 배열 요소를 하나씩 제거하여 상자를 만듦.
for (let i = 0, box = []; i < score.length; i++) {
box.push(score[i]);
if ((i + 1) % m === 0) {
boxes.push(box);
box = [];
}
}
// 최솟값을 구하여 m개씩 곱해서 answer 총합에 더함.
for (let i = 0; i < boxes.length; i++) {
answer += Math.min(...boxes[i]) * m;
}
return answer;
}
반응형
'알고리즘 > 프로그래머스 알고리즘 공부' 카테고리의 다른 글
[프로그래머스-Level 1] [JavaScript] 명예의 전당(1) - 배열, 정렬, splice 활용 (0) | 2022.11.30 |
---|---|
[프로그래머스-Level 1] [JavaScript] 부족한 금액 계산하기 (0) | 2022.11.29 |
[프로그래머스-Level 1] [JavaScript] 햄버거 만들기 - 스택(Stack) 활용 (0) | 2022.11.27 |
[프로그래머스-Level 1] [JavaScript] 푸드 파이트 대회 - sort(정렬) 활용 (0) | 2022.11.24 |
[프로그래머스-Level 1] [JavaScript] 기사단원의 무기 - 약수의 개수 구하기 (0) | 2022.11.23 |