[백준][ts/js] 2609번 최대공약수와 최소공배수

Pyotato·2023년 5월 19일
0

[백준][js/ts]

목록 보기
10/21
post-thumbnail

로직

logic

  • 최대 공약수 : 유클리드 호제법
    • 두 수 a와 b가 있을 때, b가 0이 되기 전까지 a를 b로 나누어준 나머지가 최대 공약수가 된다
    • 최소 공배수 : 두 수를 곱해준 값을 최대 공약수로 나눈 값이 최대 공약수가 된다
      • 24 18
      • 24 = 2 x 2 x 3
      • 18 = 2 x 3 x 3
  • 최소 공배수 = (2 x 2 x 3) x (2 x 3 x 3) / (2 x 3)
    = 3 x 2 x 3 x 3 = 72

풀이

//https://www.acmicpc.net/problem/2609
{
  const N: string | null = prompt(
    "숫자 두개를 띄어쓰기로 구분해서 입력해주세요."
  );
  if (N) {
    const numbers: Array<number> = N.split(" ").map((v) => parseInt(v));
    if (numbers.length === 2) {
      //유클리드 호제법 :최대공약수 구하기
      const get_gcd = (n: Array<number>): number => {
        const a: number = n[0];
        const b: number = n[1];
        if (b == 0) {
          return a;
        }
        return get_gcd([b, a % b]);
      };
      //최소 공배수 구하기
      const get_lcm = (numbers: Array<number>, g: number) => {
        const mult: number = numbers.reduce((nxt, prv) => nxt * prv, 1);
        return mult / g;
      };
      const gcd: number = get_gcd(numbers);
      console.log(gcd);
      console.log(get_lcm(numbers, gcd));
    } else {
      console.log("입력값의 개수가 부족합니다.");
    }
  }
}
/*

input
24 18

output
6
72

*/


``
profile
https://pyotato-dev.tistory.com/ 로 이사중 🚚💨🚛💨🚚💨

0개의 댓글