합성수란, 1과 자기 자신을 제외한 약수를 가진 수
자연수 n이 매개변수이고, n 이하의 합성수의 개수를 구해야한다.
시작부터 머리아프다.
일단 예제를 보면 매개변수 n이 10일 때, 합성수는 4, 6, 8, 9, 10으로 총 5개이다.
function solution(n) {
let result = [];
for (let i = 2; i <= n; i++) {
for (let j = 2; j < i; j++) {
if (i % j === 0) {
result.push(j)
break
}
}
}
return result
}
문제는 이중 for문을 사용하였고,
짜피 1은 필요없으니 2부터 시작해보자,
먼저 i가 2 일 때, j는 시작이 2인데 조건문이 j가 i보다 작으니 바로 넘어가자
i = 3, j = 2 >>> 3 % 2의 결과값은 0이 아니므로 조건을 만족하지 못 함.
i=4, j=2~3 >>> 먼저 4 % 2를 하는데 결과값이 0이므로 조건식을 통과하고 result에 push를 한다.
그리고 걸리는 break 3은 뛰어넘는다.
j의 값을 result에 push했으니 result = [2]
i = 5, j=2~4 보나마나 0이 안됨
i=6, j=2~5 >>> 6%2 조건식 통과 되니까 바로 push
result = [2, 2]
3도 되는데 왜 안넣냐? break가 고장난 eight ton truck이 아니라서
i=7, j=2~6 이거도 꽝
i=8, j=2~7, 8%2 니깐 2를 push
result = [2, 2, 2]
i=9, j=2~8, 9%2는 꽝 9%3은 통과
result = [2, 2, 2, 3]
i=10, j=2~9, 10%2 통과
[2, 2, 2, 3, 2]가 최종으로 result의 배열이되고
최종적으로 result의 길이만큼 반환하면 짜잔 끝입니다.
여담으로, 문제 정답률이 86%라고 되어있는데...
천재들만 있는거냐...
아님 내가 바본가...
1시간 동안 머리 싸메다가 겨우 풀었다 ㅠㅠ
댓글