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

이 문제입니다!
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 |