[boj] 2609. 최대공약수와 최소공배수 (node.js)

호이·2022년 5월 8일
0

algorithm

목록 보기
63/77
post-thumbnail

문제

[boj] 2609. 최대공약수와 최소공배수 (node.js)

풀이

  • 유클리드 호제법의 개념을 담은 코드! 가장 간단한 양식의 코드라 복습을 위해 기록해 둔다.
  • 유클리드 호제법
    • a = bq + r
    • GCD(a, b) == GCD(b, r) == ... == GCD(b, 0) <- r이 0이면 b가 해답
  • 최대공약수와 최소공배수의 관계
    • LCM(a, b) = A * B / GCD(a, b)
    • 다시 말해서, 두 수의 최대공약수와 최소공배수의 곱은 두 수의 곱과 같다.

생각

  • 함수 내부에서 새로운 함수를 호출할 때 return GCD()로 이전 함수를 종료하며 호출해주지 않았기 때문에 처음에는 오류가 발생했다. 이 문제처럼 재귀함수를 연쇄 호출하는 경우, 이전 내용을 중첩해 확인할 필요가 없으므로 리턴문으로 바로 명시하고 호출하자.

전체 풀이

const readline = require("readline");
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

const GCM = (a, b) => (a % b == 0 ? b : GCM(b, a % b));
const solution = () => {
  const [A, B] = input()
    .split(" ")
    .map(Number)
    .sort((a, b) => a - b);
  const gcm = GCM(A, B);
  const lcd = (A * B) / gcm;
  console.log([gcm, lcd].join("\n"));
};

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

let stdin = [];
rl.on("line", function (line) {
  stdin.push(line);
}).on("close", function () {
  solution();
  process.exit();
});
profile
매일 부활하는 개복치

0개의 댓글