문제 설명
문제 설명
약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수n
이 매개변수로 주어질 때n
이하의 합성수의 개수를 return하도록 solution 함수를 완성해주세요.
사실 이 문제를 풀어보려고 처음 페이지를 열었을 때는 약 3일 전이다. 1부터 n
까지의 숫자 중 1과 소수인 숫자를 제외하면 되는 건데 그걸 코드로 어떻게 써야할지 전혀 감이 잡히지 않아서 며칠을 손 놓고 있었다.
그러다 자세히 보니 입출력 예에 있는 4, 6, 8, 10, 12, 14는 2로 나누어지고 9, 12, 15는 3으로 나누어진다는 것을 깨닫게 되었다. (정말로 당연한 소리다. 합성수가 그런 의미니까. ㅋㅋ)
가끔씩 이렇게 당연한 소리도 코드로 작성하려고 하면 머릿 속에 남지 않아 고역이다.
n
까지 순회하는 루프 하나, 그리고 2부터 i
까지 순회하며 나누어 떨어지는지 확인하는 루프 하나를 만들면 되겠다고 생각했다. [...new Set()]
을 활용하여 중복을 제거했다.따라서 내가 작성한 코드는 아래와 같다!
function solution(n) {
let arr = [];
for (let i = 1; i <= n; i ++) {
for (let j = 2; j < i; j++) {
if (i % j === 0) {
arr.push(i)
}
}
}
return [...new Set(arr)].length
}
다른 사람들의 풀이도 살펴보았는데 대부분의 풀이가 나와 비슷한 것을 보고 많이 뿌듯했다!
(며칠 동안 내내 고민한 것은 아니고 시간이 될 때마다 한번씩 문제를 훑어보며 생각하고, 다시 뒤로 가기를 누르고, 생각하고, 뒤로 가기를 눌렀었는데 결국엔 그 짧은 시간들을 모으고 모아서 다른 사람들의 풀이와 가깝게 써냈다는 게... 난... 정말 뿌듯해요.....🥹🥹🥹🥹🥹)