[JavaScript] 프로그래머스 합성수 찾기

Gaeun·2022년 11월 12일
0

합성수 찾기

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

나의 풀이

사실 이 문제를 풀어보려고 처음 페이지를 열었을 때는 약 3일 전이다. 1부터 n까지의 숫자 중 1과 소수인 숫자를 제외하면 되는 건데 그걸 코드로 어떻게 써야할지 전혀 감이 잡히지 않아서 며칠을 손 놓고 있었다.

그러다 자세히 보니 입출력 예에 있는 4, 6, 8, 10, 12, 14는 2로 나누어지고 9, 12, 15는 3으로 나누어진다는 것을 깨닫게 되었다. (정말로 당연한 소리다. 합성수가 그런 의미니까. ㅋㅋ)

가끔씩 이렇게 당연한 소리도 코드로 작성하려고 하면 머릿 속에 남지 않아 고역이다.

  1. 그래서 1부터 n까지 순회하는 루프 하나, 그리고 2부터 i까지 순회하며 나누어 떨어지는지 확인하는 루프 하나를 만들면 되겠다고 생각했다.
  2. 6과 12 처럼 2로도 나누어지고 3으로도 나누어지는 숫자들이 있기 때문에 배열에 담은 뒤 [...new Set()]을 활용하여 중복을 제거했다.
  3. 새 배열의 길이를 구해 답을 반환했다.

따라서 내가 작성한 코드는 아래와 같다!

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
}

다른 사람들의 풀이도 살펴보았는데 대부분의 풀이가 나와 비슷한 것을 보고 많이 뿌듯했다!

(며칠 동안 내내 고민한 것은 아니고 시간이 될 때마다 한번씩 문제를 훑어보며 생각하고, 다시 뒤로 가기를 누르고, 생각하고, 뒤로 가기를 눌렀었는데 결국엔 그 짧은 시간들을 모으고 모아서 다른 사람들의 풀이와 가깝게 써냈다는 게... 난... 정말 뿌듯해요.....🥹🥹🥹🥹🥹)

profile
🌱 새싹 개발자의 고군분투 코딩 일기

0개의 댓글