n까지 돌면서 약수가 3개 이상인 합성수인 경우만 배열에 담아서 그 길이를 구한다약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 n이 매개변수로 주어질 때 n이하의 합성수의 개수를 return하도록 solution 함수를 완성해주세요.
- n까지 돌면서 모든 합성수를 구한다
- 그 합성수를 배열에 담고 그 길이를 리턴한다
- 약수가 3 이상인 경우는 어떻게 찾을까? => 배열에 담자
- 그러면 배열은 몇 개가 필요할지 모르는데? => 구하고 결과값에 담고 초기화
- 어떻게 초기화? => 반복문 안에서 변수 선언하면 반복할 때마다 초기화 되지 않을까? => 일단 해보자
function solution(n) {
let result = []
for (i = 1; i <= n; i++) {
let arr = []
for (j = 1; j <= i; j++) {
if (i % j === 0) {
arr.push(j)
}
if (arr.length > 2) {
result.push(i)
break;
}
}
}
return result.length;
}
콘솔로 찍어보니 내 생각이 맞았다
그런데 합성수라고 확인 되면 더 반복할 필요가 없지 않나? => 합성수를 확인하는 배열 arr의 길이가 2 이상이면 반복문을 빠져나가고 다음 실행을 하자
이렇게 해서 스코프를 활용하는 방법과 브레이크로 필요없는 연산을 더 하지 않는 방법을 아주 조금이라도 더 알게 되었다 결국 하다보면 늘겠지
'오늘 뭐했냐 > 기억하면 좋을 문제들' 카테고리의 다른 글
for문에서 특정 숫자로 반복이 필요할 때 (0) | 2023.06.15 |
---|---|
indexOf() (0) | 2023.06.15 |
대소문자 반대로 (0) | 2023.06.14 |
숫자야구 (0) | 2023.06.14 |
map 사용 (0) | 2023.06.14 |