반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/135808
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1~k, 1점 bad, k점 good
사과 한 상자 가격: 가장 낮은 점수p * 사과개수m
풀이
첫 번째 풀이 (실패)
function solution(k, m, score) {
let answer = 0;
score.sort((a, b) => b - a);
while(score.length >= m) {
const min = score[m - 1];
answer += min * m
score = score.splice(m)
}
return answer;
}
테케 11~15에서 시간 초과
두 번째 풀이
splice부분에서 시간이 많이 걸리는 것 같아서, tmp를 두고 움직여서 min을 찾는 방식으로 변경하였다.
function solution(k, m, score) {
let answer = 0;
let tmp = m;
score.sort((a, b) => a - b);
while(tmp <= score.length) {
const min = score[score.length - tmp];
answer += min * m
tmp += m;
}
return answer;
}
다른 풀이
function solution(k, m, score) {
let answer = 0;
const sortedScore = score.slice().sort((a, b) => a - b).slice(score.length % m);
for (let i = 0; i < sortedScore.length; i += m) {
answer += sortedScore[i] * m;
}
return answer;
}
- 애초에 score.length % m 으로 score을 잘라서 버릴 사과는 고려하지 않음
- i += m 을 하면 for문으로 깔끔하게 작성할 수 있네,,
반응형
'CS > 알고리즘' 카테고리의 다른 글
[230424] 프로세스 (0) | 2023.04.24 |
---|---|
[230423] 소수 만들기 (0) | 2023.04.23 |
[230423] 연속 부분 수열 합의 개수 (0) | 2023.04.23 |
[230423] 명예의 전당 (1) | 2023.04.23 |
[230422] 기능개발 (0) | 2023.04.22 |