코딩테스트

코딩테스트 소인수분해

김도현2 2023. 6. 5. 16:28
반응형

코딩테스트 소인수분해

 

 

문제 설명

 

 

출력 예시

 

 

 

정수 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] 배열이 나오게 됩니다~ 정답짝짝