본문 바로가기
프론트엔드로 가는 길/프로그래머스

49. 소인수분해

by woody-j 2023. 4. 26.

https://school.programmers.co.kr/learn/courses/30/lessons/120852
[ 문제 설명 ]

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

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

[ 문제 풀이 ]

 

첫번째 풀이

 

function solution(n) {
  let division = 2;
  let divisionArr = [];

  while (n > 1 && division <= Math.sqrt(n)) {
    if (n % division === 0) {
      divisionArr.push(division);
      n = n / division;
    } else {
      division++;
    }
  }

  // n이 소수인 경우 처리
  if (n > 1) {
    divisionArr.push(n);
  }
  return [...new Set(divisionArr)];
}

1. division 변수는 초기에 2로 설정되고,  divisionArr 배열은 나중에 소인수들을 담을 배열

2. while (n > 1 && division <= Math.sqrt(n)):

n이 제곱근보다 작거나 같을 때까지 반복하는 이유는, 소인수를 구하는 과정에서 중복을 피하기 위함

3. n이 division으로 나누어 떨어진다면, division을 divisionArr 배열에 추가하고, n을 division으로 나눕니다.

4. 그렇지 않으면, division을 1 증가

5. n이 1보다 크다면, n은 소수이므로 divisionArr 배열에 추가합니다.

6. divisionArr 배열에서 중복된 값을 제거하기 위해 Set 객체를 사용하고, Set 객체를 다시 배열로 변환하여 반환합니다.

 

'프론트엔드로 가는 길 > 프로그래머스' 카테고리의 다른 글

52. 정수 내림차순으로 배치하기  (1) 2023.04.30
51. 문자열 내 p와 y의 개수  (0) 2023.04.29
48. 컨트롤 제트  (0) 2023.04.25
47. 캐릭터의 좌표  (0) 2023.04.24
46. 로그인 성공  (1) 2023.04.21