과일 장수

hyuri·2023년 9월 27일
0

코딩테스트 연습

목록 보기
42/70

내가 작성한 답

// 1차
function solution(k, m, score) {
    var answer = 0;
    score.sort((a,b) => b - a);
    const scoreLength = score.length/m 
    for(let i = 0; i < scoreLength; i++){
        const apple = score.slice(0, m);
        score.splice(0,m);
        if (apple.length === m) {
            answer += Math.min(...apple)*m;
        }
    }
    return answer;
}

// 2차
function solution(k, m, score) {
    let answer = 0;
    score.sort((a,b) => b - a);
    score.map((c,d) => {
        if (d % m == 0){
            let apple = score.slice(d, d+m);
            if (apple.length == m) answer += Math.min(...apple)*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차로 작성한 답은 시간이 너무 많이 소요됐다.
그 이후 다른 방법을 통해 한 결과 1차로 작성한 함수보다 시간을 줄일 수 있었다.
소요 시간 차이가 왜 나는지 찾아본 결과
for 루프를 통해 배열 반복, slice와 splice를 사용하는데
이때마다 배열의 내용을 조작하고 나누는 작업이 상대적으로 오래 걸리기 때문이다.

2차로 작성한 답은 map() 메서드를 사용해서 조작과 복사가 없고 할당 후 계산만 이루어지기 때문에 성능이 더 좋았다.

다른 답은 내림차순 정렬 후 최솟값만 곱해서 더했다.

profile
개발자가 되고 싶은 지망생

0개의 댓글