문제 설명
소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 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)];
}
divisor
라는 변수에 선언하였다. n
이 2가 될 수 있다고 명시해놓았기 때문에 (n >= 2)
라고 작성하였고, while
문을 사용하여 조건문이 참일 때 반복해서 실행될 수 있도록 하였다. (n % divisor === 0)
이 참인 경우: divisor
의 모든 배수를 제거하여 "소인수"만 남도록 n = n / divisor
을 작성하였다. (n % divisor === 0)
이 거짓인 경우: divisor
의 값을 하나씩 늘릴 수 있도록 else divisor ++
을 작성하였다. divisor
의 모든 배수를 제거하기 위해 3번의 조건문이 반복될 때마다 (n / divisor
를 진행할 때마다) result
에 중복된 값이 들어왔다. 따라서 [...new Set()]
메서드를 활용하여 중복된 값을 지워주었다. 보기에는 정말 쉬운 문제였는데, 소인수분해하는 과정을 코드로 직접 작성하려니 생각보다 많은 시간을 투자하게 되었다. 하지만 결국엔... 내가 해냄!😎
다른 사람들의 풀이 또한 내 코드와 비슷했다. 아무래도 수학과 관련된 코드들은 대부분 공식과 비슷하게 작성하는 것 같았다. 프로그래머스 Lv.0 문제를 풀어나갈수록 다른 사람들과 비슷하게 작성할 때마다(& 코드의 길이가 줄어들 때마다) 매우 뿌듯하다!
Lv.0 문제가 이제 20개 가량 남았는데, 개강하기 전까지 다 풀어낼 수 있도록 노력해야겠다! 아자아자!