[301] 9613 GCD 합

younoah·2022년 1월 18일
0

[백준-기초]

목록 보기
29/29

9613 GCD 합

문제

양의 정수 n개가 주어졌을 때, 가능한 모든 쌍의 GCD의 합을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수 t (1 ≤ t ≤ 100)이 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있다. 각 테스트 케이스는 수의 개수 n (1 < n ≤ 100)가 주어지고, 다음에는 n개의 수가 주어진다. 입력으로 주어지는 수는 1,000,000을 넘지 않는다.

출력

각 테스트 케이스마다 가능한 모든 쌍의 GCD의 합을 출력한다.

예제 입력 1 복사

3
4 10 20 30 40
3 7 5 12
3 125 15 25

예제 출력 1 복사

70
3
35

코드

//---- 세팅 ----//
const fs = require('fs');
const stdin = (
  process.platform === 'linux'
    ? fs.readFileSync('/dev/stdin').toString()
    : `\
3
4 10 20 30 40
3 7 5 12
3 125 15 25
`
).split('\n');

const input = (() => {
  let line = 0;
  return () => stdin[line++];
})();

//---- 풀이 -----//
const t = Number(input());
const numsetArr = [];

[...Array(t)].forEach(_ => {
  numsetArr.push(input().split(' ').map(Number));
});

function gcd(a, b) {
  if (b === 0) return a;
  return gcd(b, a % b);
}

function calc(arr) {
  let sum = 0;
  for (let i = 1; i < arr.length; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      sum += gcd(arr[i], arr[j]);
    }
  }
  return sum;
}

const res = numsetArr.map(numset => {
  return calc(numset);
});

console.log(res.join('\n'));

풀이

주의!

첫번째 인자는 주어진 숫자의 갯수를 의미한다.

입력받은 배열을 순회하면서 모든 가능한 쌍의 gcd를 구한다.

profile
console.log(noah(🍕 , 🍺)); // true

0개의 댓글