코딩테스트

[코딩테스트] 합성수 찾기

홍시_코딩기록 2024. 4. 18. 23:32

문제

약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 n이 매개변수로 주어질 때 n이하의 합성수의 개수를 return하도록 solution 함수를 완성해주세요.

입출력 예 #1

10 이하 합성수는 4, 6, 8, 9, 10 로 5개입니다. 따라서 5를 return합니다.

 

입출력 예 #2

15 이하 합성수는 4, 6, 8, 9, 10, 12, 14, 15 로 8개입니다. 따라서 8을 return합니다.

 

 

📌 내 코드

function solution(n) {
    let result = [];
    for (let i = 4; i <= n; i++) {
        for(let j = 2; j < i; j++) {
            if(i % j === 0) {
                result.push(i)
            }
        }
    }
    const length = new Set(result);
    return  [...length].length
}

- 이중반복문을 사용하여 해결했다.

10을 예시로 들면

1. i는 10까지 반복하고 j는 2부터 9까지 반복한다. (1과 자기 자신 값을 제외하기 위해서)

2. i와 j가 나눠지는 숫자만 result에 push 하고

3. 중복되는 숫자를 제거하고 길이를 반환한다.

 

 

📌 다른 사람 코드

function solution(n) {
    var answer = 0;
    for(let i = 4; i <= n; i++){
        for(let j = 2; j < i; j++){
            if(i % j === 0){
                answer += 1;
                break;
            }
        }
    }

    return answer;
}

같은 방법인데 더 간단하게 했다.

나는 굳이 배열로 왜 만들었지...? 반복문 중단하면 될걸 ㅜ