안녕하세요
프로그래머스 JS [과일 장수] 본문
과일 장수
1. 필요한 조건 정리
- 사과는 상태에 따라 1점부터 k점까지의 점수로 분류한다.
- k점이 최상품의 사과 점수
- p점이 최하품의 사과 점수
- 한 상자에 m개 포장
- 사과 한 상자의 가격은 p * m
- 최대 이익을 계산 (사과는 상자 단위로만 판매, 남는 사과는 버립니다)
2. 풀이 단계 정리
- (1) 고렴이 > 저렴이 순서로 배치하기
- (2) 앞에서부터 m개씩( 가장 비싼 사과끼리 ) 상자에 담기
- (3) 사과 m개를 상자에 담았으면 상자의 마지막 사과(p) * 사과갯수(m)을 가격에 더하기
- (4) 마지막 상자에 3개보다 사과가 덜 담긴다면 총 가격을 구하기
3. 코드로 옮기기
function solution(k, m, score) {
// (1)고렴이 > 저렴이 순서로 배치하기
const 고렴이우선배열 = score.sort((a, b) => b - a);
// console.log 찍어서 잘 나타나는지 확인하기
// console.log(고렴이우선배열);
// [
// 4, 4, 4, 4, 4,
// 4, 2, 2, 2, 2,
// 1, 1
// ]
let box = [];
let money = 0;
for (let i = 0; i < 고렴이우선배열.length; i++) {
// (2)앞에서부터 m개씩( 가장 비싼 사과끼리 ) 나누어 상자에 담기
box.push(고렴이우선배열[i]);
// 사과 m개를 상자에 담았으면
// (3)상자의 마지막 사과(p) * 사과갯수(m)을 가격에 더하기
money += box[m - 1] * m;
// 박스 console.log 찍어서 잘 나타나는지 확인하기
// console.log(box);
// [ 4, 4, 4 ]
// [ 4, 4, 4 ]
// [ 2, 2, 2 ]
// [ 2, 1, 1 ]
// 다음 상자 가져오기
box = [];
}
}
// (4) 마지막 상자에 3개보다 사과가 덜 담긴다면 총 가격을 구하기
// console.log(money);
return money;
}
solution(3, 4, [1, 2, 3, 1, 2, 3, 1]);
function solution(k, m, score) {
const 고렴이우선배열 = score.sort((a, b) => b - a);
let box = [];
let money = 0;
for (let i = 0; i < score.length; i++) {
box.push(score[i]);
if (box.length === m) {
money += box[m - 1] * m;
box = [];
}
}
return money;
}
solution(3, 4, [1, 2, 3, 1, 2, 3, 1]);
다른 사람 풀이 ( Programmers: GomiLim 님 )
function solution(k, m, score) {
var answer = 0;
// 한 상자에 넣을 수 있는 사과 갯수로 전체 사과 갯수를 나눠 만들 수 있는 박스 수를 구한다.
const boxCount = Math.floor(score.length / m);
// 버릴 사과 갯수를 구한다.
const inavailableApple = score.length % m;
// 점수를 오름차순으로 정리해서 앞에서부터 불필요한 사과 갯수만큼 제거한다.
const apples = [...score].sort();
apples.splice(0,inavailableApple);
// 트럭에 뒤에서부터 count만큼씩 잘라서 박스에 넣은다음 트럭에 싣는다.
const packing = (array, box, count) => {
const truck = [];
for (let i =0; i < box; i++) {
const miniBox = array.splice(array.length-count, count);
truck.push(miniBox);
}
return truck;
/*
0 [4, 4, 4] [[4, 4, 4]]
1 [4, 4, 4] [[4, 4, 4], [4, 4, 4]]
2 [2, 2, 2] [[4, 4, 4], [4, 4, 4], [2, 2, 2]]
3??
0 [2, 2, 3, 3], [[2, 2, 3, 3]]
1 []
2
3
4??
*/
}
const truck= packing(apples,boxCount, m);
// 완성!
const result = truck.forEach(box => {
const findMinScore = Math.min(...box) ?? 0;
answer += findMinScore * m * 1;
})
return answer;
}
'프로그래머스 > Lv.1' 카테고리의 다른 글
프로그래머스 JS [명예의 전당(1)] (0) | 2023.01.29 |
---|---|
프로그래머스 JS [기사단원의 무기] (0) | 2023.01.20 |
프로그래머스 JS [다트 게임] (0) | 2023.01.15 |
프로그래머스 JS [가장 가까운 같은 글자] (0) | 2023.01.15 |
프로그래머스 JS [푸드 파이트 대회] (0) | 2023.01.13 |