캐또's coding

11653 - 소인수분해 - node.js 본문

기초 공부/백준 문제 풀이

11653 - 소인수분해 - node.js

JS_K_coding 2022. 8. 29. 11:25

https://www.acmicpc.net/problem/11653

 

11653번: 소인수분해

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

www.acmicpc.net


이전의 소수문제들에 이어 이번에는 소인수분해 문제가 나왔다. 결국 소인수분해는 2부터 나누기 시작해서 2가 안되면 3... 이렇게 추가해가는 값으로 나누는 방식일 것이다.

let input = Number(require("fs").readFileSync("/dev/stdin").toString().trim());
const result = [];
let i = 2;
while (true) {
  if (input % i == 0) {
    result.push(i);
    input = input / i;
    i = 1;
  }
  i++;
  if (i > input) break;
}
console.log(result.join("\n"));

빈 array를 하나 준비하고 나눠줄 값인 i로 2를 할당해준다. while문은 i가 input보다 커질때까지 계속 나눠주게 될 것이다. 최초 입력 받았던 input에 대해서 만약 input이 i로 나누어 떨어진다면 그 i를 result array에 추가해준다. 그리고 i를 1로 바꿔주는데, 다시 1부터 i++를 반복하면서 => 즉 2부터 다시 돌면서 나눠줄 것이기 때문. input 역시 input / i로 바꿔주기 때문에 다음 계산에서 최초 소인수분해값이 자동으로 제하고 계산될 것이다.

만약 2로 나누어 떨어지지 않는다면, i++만 될 것이고 i가 input보다 큰 것이 아닌 이상 다시 반복문을 돌 것이다. 이제 3이 된 i로 나누어 떨어지지 않는다면 다시 돌고 i는 4가 되고, 다시 5가 되고... 반복하다보면 소인수분해를 하나씩 result에 추가해줄 수 있다.

'기초 공부 > 백준 문제 풀이' 카테고리의 다른 글

4948 - 베르트랑 공준 - node.js  (0) 2022.08.30
1929 - 소수 구하기 - node.js  (0) 2022.08.29
2581 - 소수 - node.js  (0) 2022.08.29
1978 - 소수 찾기 - node.js  (0) 2022.08.29
10757 - 큰 수 A+B - node.js  (0) 2022.08.28
Comments