[백준/BOJ] 9506번 약수들의 합 [javascript/Node js]
2023. 8. 28. 16:36ㆍ코딩 테스트 (BOJ)
이번 문제는 풀면서 알고리즘을 구상하는 사고력이 늘었다기 보다는 javascript는 이런 것도 있구나 알게된 점이 더 컸다.
문제풀이
n의 약수중 본인을 제외한 가장 큰 약수는
짝수일 경우에는 1을 제외한 가장 작은 약수인 2로 n을 나눈 값과 같을 것이고,
홀수일 경우에는 2로 나눈 값보다 작을 것이다.
그러니 1부터 n을 2로 나눈 값까지만 범위를 잡고 for문을 실행해도 모든 약수를 탐색할 수 있다.
이제 for문 안에서 measure[] 라는 배열에 n의 약수인지를 확인 후 맞다면 넣어준다.
그리고 마지막에 measure 배열의 원소들을 다 합한 값이 n과 일치하면 문제에서 제시한 양식에 맞춰 출력해주면 끝이다.
전체코드
const fs = require("fs");
const input = fs.readFileSync("../input.txt").toString().trim().split("\n");
for (let i = 0; i < input.length; i++) {
if (Number(input[i]) == -1){
break;
}
var measure = [];
let n = Number(input[i]);
for (let j = 0; j <= n / 2; j++) {
if (n % j == 0) {
measure.push(j);
}
}
var sum = measure.reduce((acc, currentValue) => acc + currentValue);
if (sum == n) {
process.stdout.write(n + " = " + measure[0]);
for (let k = 1; k < measure.length; k++) {
process.stdout.write(" + " + measure[k]);
}
console.log("");
} else {
console.log(n + " is NOT perfect.");
}
}
이 문제를 풀며 새로 배운것
1. 개행 없이 출력하고 싶다면 - process.stdout.write()를 사용한다.
2. 배열의 reduce()라는 내장함수를 사용하여 for문 없이도 배열의 모든 원소의 합을 구할 수 있다.
3. javascript는 기본 배열이 가변형이다.
'코딩 테스트 (BOJ)' 카테고리의 다른 글
[백준/BOJ] 11653번 소인수분해 (Javascript / Node js) (0) | 2023.08.30 |
---|---|
[백준/BOJ] 1978번 소수 찾기 (Javascript/Node js) (0) | 2023.08.29 |
[백준/BOJ] 2869번 달팽이는 올라가고 싶다 (Node js/javascript) (0) | 2023.08.27 |
[백준/BOJ] 1193번 분수찾기(Node js/javascript) (0) | 2023.08.26 |
[백준/BOJ] 2292번 벌집(Node js/javascript) (0) | 2023.08.25 |