[JavaScript] 프로그래머스 소인수분해

Gaeun·2022년 11월 12일
0
post-custom-banner

소인수분해

문제 설명
소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 12를 소인수 분해하면 2 2 3 으로 나타낼 수 있습니다. 따라서 12의 소인수는 2와 3입니다. 자연수 n이 매개변수로 주어질 때 n의 소인수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.

나의 풀이

function solution(n) {
  let result = [];
  let divisor = 2;
  
  while (n >= 2) {
    if (n % divisor === 0) {
      result.push(divisor)
      n = n / divisor;
    }
    
     else divisor ++;
    
  }
  
  return [...new Set(result)];
}
  1. 우선 답을 넣을 빈 배열을 선언하였다.
  2. 소인수분해가 되는 가장 작은 값인 2를 divisor라는 변수에 선언하였다.
  3. 제한사항에서 n이 2가 될 수 있다고 명시해놓았기 때문에 (n >= 2)라고 작성하였고, while문을 사용하여 조건문이 참일 때 반복해서 실행될 수 있도록 하였다.
    • 조건문(n % divisor === 0)이 참인 경우: divisor의 모든 배수를 제거하여 "소인수"만 남도록 n = n / divisor을 작성하였다.
    • 조건문(n % divisor === 0)이 거짓인 경우: divisor의 값을 하나씩 늘릴 수 있도록 else divisor ++을 작성하였다.
  4. divisor의 모든 배수를 제거하기 위해 3번의 조건문이 반복될 때마다 (n / divisor를 진행할 때마다) result에 중복된 값이 들어왔다. 따라서 [...new Set()] 메서드를 활용하여 중복된 값을 지워주었다.

보기에는 정말 쉬운 문제였는데, 소인수분해하는 과정을 코드로 직접 작성하려니 생각보다 많은 시간을 투자하게 되었다. 하지만 결국엔... 내가 해냄!😎

다른 사람들의 풀이 또한 내 코드와 비슷했다. 아무래도 수학과 관련된 코드들은 대부분 공식과 비슷하게 작성하는 것 같았다. 프로그래머스 Lv.0 문제를 풀어나갈수록 다른 사람들과 비슷하게 작성할 때마다(& 코드의 길이가 줄어들 때마다) 매우 뿌듯하다!

Lv.0 문제가 이제 20개 가량 남았는데, 개강하기 전까지 다 풀어낼 수 있도록 노력해야겠다! 아자아자!

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

0개의 댓글