레쭈고 코테

코딩 테스트 - 63

정땅미 2025. 4. 18. 00:52

제가 오늘 해결하려 한 문제는!

 

이 문제입니다!

1단계인데 저에게... 어찌나 어렵던지... 알고리즘 생각하는 것부터 어려웠기에... ㅠㅠ 30분.. 고민 햇습니다..

결국 지피티에게 힌트를 얻었습니다!

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

 

처음에 저는 코드를 이렇게 작성했는데...... 시간 초과가 뜨는 거예요!

시간 복잡도가 중요한 건 알았지만.. 갑자기 코드를 최적화하려니까 너무 어려운 것입니다.....ㅠㅠ

그래서 제가 다시 바꾼 코드는!

function solution(k, m, score) {
    var answer = 0;
    score.sort((a, b) => b - a);
    for(let i=0; i<score.length; i+=m) {
        var minscore = score[i + m - 1];
        if(minscore) answer += minscore * m;
    }
    return answer;
}

 

이것입니다! 굳이 splice 를 해줄 필요 없이 [i + m - 1] 이라는 생각지도 못 했던 식을 가져왓어요!

이렇게 해주면 제가 어차피 내림차순 정렬을 해 뒀으니 바로 가장 작은 값을 가져올 수 있더라구요!

근데 배열이 m 으로 나눠 떨어지지 않아 남을 수 있잖아요! 그럼 최솟값이 없는 경우이기 때문에~ minscore 가 있을 경우에만!!

answer 을 구해줬습니다!!!!

코드가 깔끔해진 게 한 눈에 보이니까 신기하기도 하면서~ 뭔가 굉장히... 아쉬운 느낌이 들고,, 더 공부해야겠다는 생각이 들었습니당.

'레쭈고 코테' 카테고리의 다른 글

코딩테스트 - 62  (0) 2025.03.23
코딩테스트 - 61  (0) 2025.02.28
코딩 테스트 - 60  (0) 2025.02.11
코딩 테스트 - 59  (0) 2025.02.10
코딩 테스트 - 58  (1) 2025.01.22