본문 바로가기

CS/알고리즘

[230427] 과일 장수

반응형

 

 

문제

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;
}
  1. 애초에 score.length % m 으로 score을 잘라서 버릴 사과는 고려하지 않음
  2. 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