티스토리 뷰
2022.11.24
프로그래머스 스쿨 Lv01. 과일 장수
🚀 문제 파악
* 사과는 1점~k점으로 품질 분류
* 한 상자에 사과 m개씩 포장
* 상자의 사과 중 가장 낮은 점수는 p
* 사과 한 상자의 가격은 p*m
* 가능한 많은 사과를 팔고 최대 이익 얻기
**(예)
* 최대점 3점, 사과 한상자에 4개씩 포장
* 사과 7개의 점수가 score = [1,2,3,1,2,3,1] 의 경우
* 한 상자에 [2,3,2,3] 을 넣어 판매해 최대 이익
* (최저 사과 점수) x (한 상자에 담긴 사과 개수) x (상자의 개수) = 2 x 4 x 1 = 8
🚀 문제 해결 방법(1) 내림차순 정렬 후, splice()
1. 사과의 점수가 담긴 배열 score를 내림차순 정렬한다.
*내림차순 정렬하는 방법(1) sort() 후 reverse()
이 방법은 사전에서 단어 찾듯 첫 글자부터 확인하므로 숫자 정렬에는 적합하지 않다
*내림차순 정렬하는 방법(2) sort() 의 콜백함수를 활용
Array.sort((a,b) => b-a)
a는 인덱스 앞 순서 요소, b는 인덱스 뒷 순서 요소
b-a의 값이 양수면 b를 왼쪽으로, a를 오른쪽으로 (버블정렬과 비슷한가?)
2. 정렬한 score배열을 m개씩 나눈다. / splice() 사용
3. 나눈 배열 중 length가 m개인 배열에서의 최소 값을 찾아 합한다.
🔥 실패 (테스트 11~15 시간초과)
function solution(k, m, score) {
var answer = 0;
// score배열 내림차순 정렬
score.sort( (a,b) => b-a );
var cnt = parseInt(score.length/m);
for(var i = 1; i <= cnt; i++){
// m-1번째 요소는 항상 최소값 (이미 정렬된 배열을 splice()했으므로)
answer += score.splice(0,m)[m-1]*m;
}
return answer;
}
🚀 문제 해결 방법(2) 내림차순 정렬 후 m-1번째 값을 구해 모두 합하기
1. 사과의 점수가 담긴 배열 score를 내림차순 정렬한다.
2. 정렬한 score배열의 m-1번째 값을 모두 구해 합한다
(예) score = [ 5,4,3,2,1] / m = 2 인 경우 4,2 의 합을 반환한다
🚀 통과 코드
function solution(k, m, score) {
var answer = 0;
score.sort((a,b) => b-a);
for(var i = 1; i <= score.length/m; i++){
var idx = i*m-1;
answer += score[idx]*m;
}
return answer;
}
'🔥 해보자고 🔥' 카테고리의 다른 글
프로그래머스 스쿨 Lv01. 성격유형검사하기 (0) | 2022.11.30 |
---|---|
프로그래머스 스쿨 Lv01. 햄버거 만들기 (0) | 2022.11.29 |
프로그래머스 스쿨 Lv01. 명예의 전당(1) (0) | 2022.11.28 |
프로그래머스 스쿨 Lv01. 푸드 파이트 대회 (0) | 2022.11.25 |
프로그래머스 스쿨 Lv01. 기사단원의 무기 (0) | 2022.11.23 |