레쭈고 코테

코딩 테스트 - 57

정땅미 2025. 1. 12. 21:21

오늘 제가 푼 문제는!

 

이것이엇습니닷.ㅎㅎ

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