본문 바로가기
TIL

js 코딩테스트 소인수 분해 문제

by 은지:) 2022. 12. 23.
728x90
반응형

 

 

 

문제

 

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

제한사항
2 ≤ n ≤ 10,000

 

 

 

 

내 답

 

function solution(n) {
  if(n===2){
    return [2]
  }
  let answer = 2
  const Arr = []
  
  while(answer <= n){
      if(n%answer!==0){
        answer = answer+1
      }
    if(n%answer===0){
      n = n/answer
      Arr.push(answer)
    }
  }
  const set = new Set(Arr)
  const unique = [...set]
  // const unique = Arr.filter((el, idx)=> Arr.indexOf(el) === idx)
  return unique
}

solution(50)

 

 

팩토리얼 문제에서 쓴 while 문을 활용해서 풀었다

answer 가 1로 시작하면 n이 무한루프 돌기 때문에 (n 몫이 똑같음)

2는 따로 빼어 리턴 처리했다 (이때 2 배열로 안 넣어서 엄청 삽질했다... 😂, 중복 체크하는 식에 문제 있나 엄청 들여다봄...)

 

n 을 나눌 수 있는 한 계속 작은 수로 나누기 위해

나머지가 0이라면 n/answer 로 나눈 후 그 몫을 n으로 지정해 다시 n을 answer로 나누게 했고

나머지가 나올시 answer 에 1를 더하여(while 조건문 때문에 계속 돌아감) 다시 나머지가 없는 answer 값이 나오도록 했다

 

 

 

 

728x90
반응형

댓글