https://school.programmers.co.kr/learn/courses/30/lessons/135808#
나의 풀이
function solution(k, m, score) {
score.sort((a,b) => b-a)
const result = score.filter((x,i) => (i+1) % m === 0)
return result.reduce((a,b) => a+b) * m
}
이 코드는 케이스 한개가 통과가 되지않는다.
왜그럴까 ?...
원리는 내림차순으로 해서 제일 큰 값들을 배열 앞쪽으로 이동시킨다.
그리고 filter를 통해서 m의 배수만 걸러낸다
이렇게하면 내림차순이기 때문에 m의 배수만큼이면 한 상자에 담았을 때 가장 낮은 점수만 뽑아져나온다.
마지막으로 그것들을 다 더하고 m을 곱하면 그게 최대이득이 된다.
아 해결했다.
function solution(k, m, score) {
score.sort((a,b) => b-a)
const result = score.filter((x,i) => (i+1) % m === 0)
return result.reduce((a,b) => a+b,0) * m
}
result가 빈 배열일 경우 reduce를 할때 초기값을 설정해주지 않으면 기본값으로 첫항을 초기값으로 잡는데 빈 배열은 첫항이 없으니 런타임 에러가 나는 것이다. 따라서 초기값 0을 따로 설정해줘야한다.
다른 풀이
function solution(k, m, score) {
score.sort((a,b) => b-a)
let result = 0
for(let i=0; i <= score.length - m; i+= m) {
result += score[i + m - 1] * m
}
return result;
}
이것도 위 풀이와 비슷한 방식이다.
마음에 정말 들지 않는 풀이이다.
실패 풀이
function solution(k, m, score) {
score.sort((a,b) => b-a)
let result = 0
while(score.length >= m) {
const data = score.splice(0,m)
const calculate = data[m-1] * m
result += calculate
}
return result
}
이건 정말 시간이 오래걸려 통과를 못하는 풀이다.
계속해서 splice로 0~m까지 쪼개고 그것의 마지막 항과 m을 곱하고 result에 더하고
또 쪼개고 이렇게 반복하는 것이다.
여기서 slice로 바꾸면 시간이 두배로 더 걸린다.
다른 사람 풀이
'알고리즘 > 프로그래머스 - JS' 카테고리의 다른 글
[프로그래머스] level.1 이상한 문자 만들기 (0) | 2023.01.28 |
---|---|
[프로그래머스-JS] level.1 모의고사 <완전탐색> / 다시풀기o (0) | 2023.01.17 |
[프로그래머스 - JS] level.2 주차 요금 계산 (0) | 2023.01.02 |
[프로그래머스 - JS] level.2 귤 고르기 (0) | 2022.12.31 |
[프로그래머스] level.2 압축 (0) | 2022.12.27 |