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
반응형
'자료구조 및 알고리즘 > JavaScript Practice' 카테고리의 다른 글
[프로그래머스] 로또의 최고 순위와 최저 순위 (0) | 2024.12.28 |
---|---|
[프로그래머스] [1차] 다트 게임 (0) | 2024.12.26 |
[프로그래머스] 포켓몬 (0) | 2024.12.23 |
[프로그래머스] [1차] 비밀지도 (1) | 2024.12.21 |
[프로그래머스] 숫자 문자열과 영단어 (0) | 2024.12.20 |