문제
약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 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;
}
같은 방법인데 더 간단하게 했다.
나는 굳이 배열로 왜 만들었지...? 반복문 중단하면 될걸 ㅜ
'코딩테스트' 카테고리의 다른 글
[코딩테스트] 영어가 싫어요 (0) | 2024.04.26 |
---|---|
[코딩테스트] 숨어있는 숫자의 덧셈 (2) (0) | 2024.04.24 |
[코딩테스트] 문자열 정렬하기(2) (0) | 2024.04.17 |
[코딩테스트] k의 개수 (0) | 2024.04.04 |
[코딩테스트] 문자열 정렬하기(1) (0) | 2024.03.30 |