자료구조 및 알고리즘/JavaScript Practice

[프로그래머스] 과일 장수

Ryomi 2024. 12. 24. 21:24
728x90
반응형

24년 12월 24일
해결한 문제 갯수: 5

 

문제 설명

 

문제 분석

  • k: 최상품의 사과 점수
  • m: 상자에 담길 수 있는 사과의 갯수
  • score: 각 사과의 점수가 담긴 배열
  • m개씩 담긴 사과 상자에서, (가장 낮은 사과 점수 * m)를 반환합니다.
  • 이익이 발생하지 않는 경우, 0을 return합니다.

 

첫 번째 접근: while (O(n))

function solution(k, m, score) {
    score.sort((a, b) => b - a)
    let answer = 0
    
    while(score.length >= m) {
        answer += score.slice(0, m)[m-1] * m
        score.splice(0, m)
    }
    
    return answer
}
  • score.sort() : score를 내림차순으로 정렬합니다.
  • while
    • slice() : score 배열을 m개씩 slice한 후, 가장 마지막 인덱스 요소를 answer에 더합니다. 
    • splice() : score 배열을 업데이트 합니다. 

 

두 번째 접근: filter/reduce (O(n log n))

function solution(k, m, score) {
    score.sort((a, b) => b - a)
    
    return score
        .filter((_, i) => i > 0 && (i + 1) % m === 0)
        .reduce((a, c) => a + c * m, 0)
}

개선사항

  • filter : 각 상자의 최소값인 요소만 담은 배열을 생성합니다.
  • reduce: 각 요소에 m을 곱한 후 이를 모두 더한 값을 반환합니다.

 

728x90
반응형