[백준] 11653. 소인수분해 (node.js/javascript/자바스크립트/알고리즘/코딩테스트)
2021. 4. 14. 12:24ㆍFront-end/알고리즘
728x90
반응형
[백준] 11653. 소인수분해
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
1 초 | 256 MB | 26265 | 14154 | 11200 | 53.331% |
문제
정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오.
입력
첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.
출력
N의 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력한다. N이 1인 경우 아무것도 출력하지 않는다.
예제 입력 1
72
예제 출력 1
2
2
2
3
3
예제 입력 2
3
예제 출력 2
3
예제 입력 3
6
예제 출력 3
2
3
예제 입력 4
2
예제 출력 4
2
예제 입력 5
9991
예제 출력 5
97
103
내가 작성한 코드 (자바스크립트)
let fs = require('fs');
let input = fs.readFileSync('예제.txt').toString();
let number = Number(input);
let originNumber = number; // 원래수를 알기 위해 복사해둠
let primenumber = 2;
let smallFactorization = [];
while(true){
if(originNumber === 1){ // 원래 수가 1이면 반복문 탈출
break;
}else{
if(number !== 1){ // number가 1이 아닐때까지
if(number % primenumber === 0){ // 소인수분해 되었을 때
smallFactorization.push(primenumber);
number = number / primenumber;
}else{
primenumber++;
}
}else{ // 나누어서 number가 1이 되면 반복문을 탈출한다.
break;
}
}
}
if(smallFactorization.length !== 0){
console.log(smallFactorization.join("\n"));
}
주어진 수를 number라는 변수에 할당한다.
원래 수(원본)를 기억해두기 위해 originNumber에 복사를 해둔다. (나중에 반복문을 돌며 number는 소인수분해되어 변하기 때문에)
originNumber가 1이라면 반복문을 탈출한다. 즉 원래 수가 1이면 소인수분해 할 것도 없기 때문이다.
그렇지 않다면 계속 반복문을 돌며 소인수분해한다. primenumber는 처음에 2부터 시작하고, 나누어 떨어지지 않는다면 primenumber를 1씩 증가시키면 된다. 그렇게해서 나누어 떨어진다면 smallFactorization이라는 배열에 primenumber를 집어넣고, number는 number를 primenumber로 나눈 값으로 갱신한다.
그렇게 남은 수(number)가 1이 될 때까지 반복문을 계속 돌다가 1이 되면 반복문을 탈출한다.
그리고 마지막으로 smallFactoriaztion의 길이가 0이 아니라면 안의 값들을 출력하면 된다.
728x90
반응형
'Front-end > 알고리즘' 카테고리의 다른 글
[백준] 3009. 네번째 점(node.js/javascript/자바스크립트/알고리즘/코딩테스트) (0) | 2021.04.17 |
---|---|
[백준] 1085. 직사각형에서 탈출(node.js/javascript/자바스크립트/알고리즘/코딩테스트) (0) | 2021.04.17 |
[백준] 2581. 소수 (node.js/javascript/자바스크립트/알고리즘/코딩테스트) (0) | 2021.04.14 |
[백준] 1978. 소수 찾기(node.js/javascript/자바스크립트/알고리즘/코딩테스트) (0) | 2021.04.14 |
[백준] 1011. Fly me to the Alpha Centauri (자바스크립트/node.js/코딩테스트/알고리즘) (0) | 2021.04.12 |