오늘 제가 푼 문제는!
이것이엇습니닷.ㅎㅎ
function solution(number, limit, power) {
var answer = 0;
var cnt = 0;
var num = [];
for(let i=1; i<=number; i++) {
for(let j=1; j<= Math.sqrt(i); j++) {
if(i%j===0) {
cnt++;
if (j !== i / j) cnt++;
}
}
if(cnt !== 0) num.push(cnt);
cnt = 0;
}
for(let i=0; i<num.length; i++) {
if(num[i] > limit) num[i] = power;
answer += num[i];
}
return answer;
}
이건 성공한 코드예요!
처음에 저는 j <= i 만큼만 돌리고 if (j !== i/j) cnt++; 이 코드를 빼고 풀었는데 시간 초과가 뜨더라구요..ㅠㅠ
그래서 어떻게 풀어야 하나 고민했어요!
그래서 이 문제 질문 보기를 봤더니 사람들이 약수를 구할 때 i까지 돌리는 것보다는 i의 절반까지만 돌리라는 거예요!
이 말을 듣고 저는 Math.sqrt(i) 이렇게만 쓰고 멀뚱멀뚱 있었는데 이제는 값이 틀리더라구요..
그래서ㅠㅠ 또다시 멘붕에 빠졌지만 생각해 보니까 이러면 그 j 의 짝! 은 ++ 가 안 되는 거예요.
제가 예시 문장을 못 만들어서 이것을 가져왓습니닷.
지피티가 예시를 만들어 줬어요ㅎㅎ
그래서 이제 만약 j 가 i/j 나눈 것과 같지 않다면 또 ++ 를 해 줘야 해요!
그 위의 조건에서 i % j === 0 이 되어야 한다는 조건이 이미 있으니 여긴 헷갈리지 않겠죠?
이렇게! 시간 복잡도도 아주아주 중요하다는 사실을 다시금 알게 되었습니닷.
'레쭈고 코테' 카테고리의 다른 글
코딩 테스트 - 56 (1) | 2025.01.08 |
---|---|
코딩 테스트 - 55 (0) | 2025.01.07 |
코딩 테스트 - 54 (0) | 2025.01.06 |
코딩 테스트 - 53 (0) | 2025.01.05 |
코딩 테스트 - 52 (0) | 2025.01.03 |