1. 조건
k, m 숫자 2개, score 배열 1개가 조건으로 주어진다.
다 작성했나? 생각하고 검토하는 과정에서
k가 쓰이지 않아 예외처리 할게 남아있나? 계속 고민하다가 그냥 제출했는데 통과했다.
사실 k가 왜 있는지 모르겠다.... 음.... 아시는 분?
이 문제는 조건들의 사이즈가 여유로워서
시간복잡도를 고민하지 않아도됐다.
2. 풀이 과정
맨 처음 풀이는 배열을 하나하나 만들고 슬라이싱 하여 집어넣고
만들었둔 배열들의 마지막 인덱스를 result에 일일히 더했는데
다 완성하고 보니 굳이 배열을 하나하나 만들지 않고
마지막 인덱스부분만 result에 더해주고 다음 루프로 넘어가면 되는거였는데
생각없이 푼 것 같아 좀 자괴감 든다.
3. 첫번째 풀이
function solution(k, m, score) {
if (score.length === 0) return 0
const sortedScore = score.sort((a, b) => b - a)
const packageMount = parseInt((sortedScore.length) / m, 10)
const packages = []
let result = 0
for (let i = 0; i < packageMount; i += 1) {
const packaged = []
for (let j = 0; j < m; j += 1) {
packaged.push(sortedScore[(i * m) + j])
}
packages.push(packaged)
}
for (let i = 0; i < packages.length; i += 1) {
result += (packages[i][m - 1] * m)
}
return result
}
solution(3, 4, [1, 2, 3, 1, 2, 3, 1])
solution(4, 3, [4, 1, 2, 2, 4, 4, 4, 4, 1, 2, 4, 2])
4. 개선한 풀이
function solution(k, m, score) {
if (score.length === 0) return 0;
const sortedScore = score.sort((a, b) => {return b - a})
const packMount = parseInt((sortedScore.length / m), 10)
let result = 0
for (let i = 0; i < packMount; i += 1) {
result += sortedScore[(i * m) + (m - 1)] * m
}
console.log(result)
}
solution(3, 4, [1, 2, 3, 1, 2, 3, 1])
solution(4, 3, [4, 1, 2, 2, 4, 4, 4, 4, 1, 2, 4, 2])
'개발이야기 > 알고리즘' 카테고리의 다른 글
[알고리즘] 프로그래머스 SQL(2) (0) | 2023.02.09 |
---|---|
[알고리즘] 프로그래머스 SQL(1) (0) | 2023.02.09 |
[알고리즘] 프로그래머스 푸드 파이트 대회 (0) | 2023.02.03 |
[알고리즘] 프로그래머스 햄버거 만들기 (0) | 2023.02.02 |
[알고리즘] 프로그래머스 옹알이(2) (0) | 2023.02.01 |