[백준][ts/js] 11653번 소인수분해

Pyotato·2023년 6월 30일
0

[백준][js/ts]

목록 보기
19/21
post-thumbnail

문제

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

입력

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

출력

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

로직

logic

  • 소인수란 자연수를 나누어 떨어뜨리는 약수 중에서 소수[1]인 약수이다.
  • 즉, 어떤 숫자를 소수들의 약수로만 나타내면된다.
  • 소수는 1과 자기자신만으로만 나뉘어지는 숫자다.
  • 예를 들면 72=9*8=3*3*2*2*2이다.

후기

이상한 입력값을 넣었을 때 에러처리를 해주기 번거롭네. 물론 따로 모듈로 만들 수는 있지만 코테로 따로 뚝 떼어놓은 코드라서 그런 지 반복해서 코드를 갔다쓰는 방식밖에 없어서 아쉽다 귀찮다 더 좋은 방식 없나.

풀이

{
  const error_msg = () => {
    console.log("입력값이 부적절합니다.");
  };
  const N: string | null = prompt(
    "1보다 크거나 같고 10,000,000보다 작거나 같은 값을 입력해주세요."
  );
  if (N) {
    let n: number = typeof parseInt(N) === "number" ? parseInt(N) : -1;
    if (n) {
      if (n > 1 && n <= 3) console.log(n);
      else {
        let i: number = 2;
        while (n !== 1) {
          if (n % i === 0) {
            n /= i;
            console.log(i);
          } else {
            i++;
          }
        }
      }
    } else {
      error_msg();
    }
  } else {
    error_msg();
  }
}


/*
test1

input
72

output
2
2
2
3
3

----

test2

input
3
output
3

----

test3

input
6

output
2
3

----

test4

input
2

output
2

----

test5

input
9991

output
97
103

*/
profile
https://pyotato-dev.tistory.com/ 로 이사중 🚚💨🚛💨🚚💨

0개의 댓글