[300] 2609번 최대공약수와 최소공배수

younoah·2022년 1월 12일
0

[백준-기초]

목록 보기
21/29

2609번 최대공약수와 최소공배수

문제

두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다.

출력

첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.

예제 입력 1 복사

24 18

예제 출력 1 복사

6
72

코드

//---- 세팅 ----//
const fs = require('fs');
const stdin = (
  process.platform === 'linux'
    ? fs.readFileSync('/dev/stdin').toString()
    : `\
24 18
`
).split('\n');

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

//---- 풀이 -----//

const [a, b] = input().split(' ').map(Number);

const gcd = (a, b) => {
  let res = 1;

  for (let i = 1; i <= Math.min(a, b); i++) {
    if (a % i === 0 && b % i === 0) res = i;
  }

  return res;
};

const lcm = (a, b) => {
  return (a * b) / gcd(a, b);
};

console.log(gcd(a, b));
console.log(lcm(a, b));

풀이

참고

최대공약수 개념

  • 최대공약수는 줄여서 GCD라고 쓴다.
  • 최대공약수는 두 수 AB의 공통된 약수 중에 가장 큰 정수이다.
  • 최대공약수를 구하는 가장 쉬운 방법은 2부터 min(A, B)까지 모든 정수로 나누어보는 방법이다.
  • 최대공약수가 1인 두 수를 서로소(Coprime)라고 한다.

최소공배수 개념

  • 최소공배수는 줄여서 LCM이라고 한다.
  • 두 수의 최소공배수는 두 수의 공통된 배수 중에서 가장 작은 정수를 말한다.
  • 최소공배수는 위에서 구했던 GCD(최대 공약수)를 응용해서 구할 수 있다.
  • 두 수 a, b의 최대공약수를 gcd라고 했을 때, 최소공배수 lcm = gcd * (a/gcd) * (b/gcd) 이다.
  • a * b = gcd * lcm 과 같다는 원리를 이용하는 것이다.
  • lcm = (a*b) / gcd 이다.
// 최대공약수
function gcd(a, b) {
  let res = 1;

  for (let i = 1; i <= Math.min(a, b); i++) {
    if (a % i === 0 && b % i === 0) res = i;
  }

  return res;
}

// 최소공배수
function lcm(a, b) {
  return (a * b) / gcd(a, b);
}

console.log(gcd(3, 12), lcm(3, 12)); // 3 12
profile
console.log(noah(🍕 , 🍺)); // true

0개의 댓글