728x90
# 문제
소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 12를 소인수 분해하면 2 * 2 * 3 으로 나타낼 수 있습니다. 따라서 12의 소인수는 2와 3입니다. 자연수 n이 매개변수로 주어질 때 n의 소인수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.
# 답안
// 1. 입력: 자연수 n => 2~10000
// 2. 출력: n의 소인수를 오름차순으로 담은 배열
// for문 돌릴건데, i는 2부터 n까지고, i % n === 0 이면 i를 빈배열에 push
// 근데 중복 없어야하니까 배열에 i가 있는지 확인하고 push
// n을 i로 나눈 몫으로 계속 갱신해야함 -> for문 안에 while문 사용
function solution(n) {
let answer = [];
for (let i = 2; i <= n; i++) {
while (n % i === 0) {
if (!answer.includes(i)) {
answer.push(i);
}
n /= i;
}
}
return answer;
}
solution(12)를 실행할 때, 다음과 같은 과정이 진행된다.
- 초기에 n은 12이고, i는 2부터 시작한다.
- 처음에는 i가 2이므로 n(12) % i(2)는 0이다. 따라서 while 루프 본문이 실행된다.
answer 배열에는 아직 2가 포함되어 있지 않으므로, answer 배열에 2를 추가한다. // answer = [2]
n(12)을 i(2)로 나눈 값인 6을 다시 n에 할당한다. // n = 6 - 다시 i가 2로 while 루프가 실행된다. (while 루프의 조건이 true이면, while 루프 내부의 코드가 계속 실행되므로, i 는 해당 루프 내부에서 증가하지 않는다.)
이번에도 n(6) % i(2)가 0이므로 while 루프 본문이 실행된다.
if 조건에서 answer 배열에는 이미 i(2)가 포함되어 있으므로, 추가하지 않는다.
n(6)을 i(2)로 나눈 값인 3을 다시 n에 할당한다. // n = 3 - 이제 i가 2이지만 n(3) % i(2)가 0이 아니므로 while 루프를 벗어난다.
그 후 i는 3으로 증가한다. // i = 3 - i가 3일 때, n(3) % i(3)가 0이므로 while 루프 본문이 실행된다.
answer 배열에는 아직 3이 포함되어 있지 않으므로, answer 배열에 3을 추가한다. // answer = [2, 3]
n(3)을 i(3)로 나눈 값인 1을 다시 n에 할당한다. // n = 1 - 이제 i가 3이지만 n(1) % i(3)가 0이 아니므로 while 루프를 벗어난다.
그 후 i는 4로 증가한다. // i = 4
이제 i(4)가 n(1)보다 커서 for 루프가 종료되고, answer 배열인 [2, 3]이 반환된다.
728x90
'Coding Test > Programmers' 카테고리의 다른 글
[프로그래머스/JavaScript] 코딩 테스트 풀이 (문제 72 - 영어가 싫어요) (0) | 2024.04.17 |
---|---|
[프로그래머스/JavaScript] 코딩 테스트 풀이 (문제 71 - 잘라서 배열로 저장하기 ) (0) | 2024.04.17 |
[프로그래머스/JavaScript] 코딩 테스트 풀이 (문제 69 - 컨트롤 제트) (0) | 2024.04.04 |
[프로그래머스/JavaScript] 코딩 테스트 풀이 (문제 68 - 7의 개수 ) (0) | 2024.04.04 |
[프로그래머스/JavaScript] 코딩 테스트 풀이 (문제 67 - 한 번만 등장한 문자) (0) | 2024.04.04 |