본문 바로가기
문제풀이/백준

11653 소인수분해

by dev_kong 2021. 11. 25.
728x90
728x90

문제설명

정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오.

첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.

N의 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력한다. N이 1인 경우 아무것도 출력하지 않는다.

 

접근방법

배열하나 찍고..

N이 1 이면 출력 없게 끔 얼리리턴 하고

for문 돌리고

if로 나머지 0일때 i를 빈배열에 집어 넣고

N에다가 i로 나눈 값 재할당해주고

i에서 1빼주고

다시 반복문 돌리면 될드읏?

아 리턴은 배열에 join으로 줄바꿔서...

function solution(number) {
  let answer = [];
  if (number === 1) return;
  for (let i = 2; i <= number; i++) {
    if (number % i === 0) {
      answer.push(i);
      number /= i;
      i -= 1;
    }
  }
  return answer.join('\n');

맞긴 맞았다.

근데 뭔가

여기서 원한 답은 아닌듯..?

이 문제에선 숫자하나씩 출력하길 원한거 같은데

나는 긴 문자열을 하나씩 한줄씩 띄어서 출력한거니까.

여기선 배열이 아니라

바로 console.log로 출력 해주는게 맞는듯 하다.

 

function solution(number) {
  if (number === 1) return;
  for (let i = 2; i <= number; i++) {
    if (number % i === 0) {
      console.log(i);
      number /= i;
      i -= 1;
    }
  }
}

 

 

다른 사람이 푼걸 보니까 for 문 조건을

i*i<= number 로 돌렸던데

이게 뭐 소인수분해 할 때 

소인수분해 할 숫자에 루트를 씌워서

어쩌고.. 저쩌곤데..

문과라 모르겠습니다..

문송합니다..

이해가 안되면 외울게요..!

728x90
728x90

댓글