문제 링크
https://www.acmicpc.net/problem/9613
풀이
const getGCD = (a, b) => {
if (a % b === 0) return b;
return getGCD(b, a % b);
};
const getSum = (n, ...arr) => {
let sum = 0;
arr.sort((a, b) => b - a);
arr.forEach((v, i) => {
while (i < n-1) {
sum += getGCD(v, arr[++i]);
}
});
return sum;
};
const [T, ...input] = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const output = [];
input.forEach(v => {
output.push(getSum(...v.split(' ').map(v => +v)));
});
console.log(output.join('\n'));
주어진 수들을 두 개씩 짝지어서 그 두 수의 GCD의 합을 구하여 출력하였다.
최대공약수를 구하는 getGCD의 매개변수 a는 b이상이어야 하므로 먼저 수들을 내림차순으로 정렬하였다.
'연습장 > 백준(BOJ) 문제풀이' 카테고리의 다른 글
[백준 15655] N과 M (6) with Node.js (0) | 2021.08.16 |
---|---|
[백준 2512] 예산 with Node.js (0) | 2021.08.14 |
[백준 15654] N과 M (5) with Node.js (0) | 2021.08.12 |
[백준 2667] 단지번호붙이기 with Node.js (0) | 2021.08.09 |
[백준 11659] 구간 합 구하기 4 with Node.js (0) | 2021.08.09 |