반응형
코딩테스트 소인수분해
문제 설명
출력 예시
정수 n이 매개변수로 주어질 때 n를 소인수 분해하여 나온 수들을 중복없는 배열로 출력하는 문제입니다~
우선 소인수 분해하는 코드부터 짜봐야겠죠? 바로 갑시닷
let n = 420;
var answer = [];
let i = 2;
while(n>1){ //정수가 몇이 나올지 모르니 while문
if(n % i == 0){ //i로 나눴을때 나머지가 0일시 계속 나눠주기
answer.push(i);
n /= i; //n이 1이 될때까지 나누기
} else {
i++
}
}
//answer= [2, 2, 3, 5, 7]
정수가 정확히 몇이 나올지 모르니 while문을 썼습니다.
n을 계속 i로 나누고 나누기 불가능 한 수가 나올때는 i를 증가시켜 n을 1이 될때까지 나눴습니다.
나눠질때마다 answer에 요소로 채워넣어 줬습니다.
하지만 이렇게 끝내게 되면 답은
[2,2,3,5,7]
이런 배열이 나옵니다.
문제에서 원하는 출력은 배열에 중복 숫자가 없는 배열이니 조건문을 하나 추가해주도록 해보겠습니다.
let n = 420;
var answer = [];
let i = 2;
const set = [];
while(n>1){ //정수가 몇이 나올지 모르니 while문
if(n % i == 0){ //i로 나눴을때 나머지가 0일시 계속 나눠주기
answer.push(i);
n /= i; //n이 1이 될때까지 나누기
} else {
i++
}
}
[...answer].forEach((e,i)=>{
if([...answer][i] !== [...answer][i+1]){ //i번째 인덱스와 그 다음 인덱스가 같지 않을시에만 추가
set.push(e)
}
})
//answer= [2, 2, 3, 5, 7]
//set = [2, 3, 5, 7]
요소 하나하나를 비교하기 위해 answer 배열을 펼침연산을 이용하였습니다.
현재 인덱스와 다음 인덱스를 비교하여 같지않을 시에만 set배열에 추가하여 마지막엔 set배열을 출력해주어
[2, 3, 5, 7] 배열이 나오게 됩니다~ 정답짝짝