[프로그래머스] 최대공약수와 최소공배수 - JS

나는야 토마토·2022년 2월 13일
0

algorithm

목록 보기
13/24
post-thumbnail

최대공약수와 최소공배수

문제

두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.

입출력 예

nmreturn
312[3, 12]
25[1, 10]

풀이

  • 최대공약수 : 유클리드 호제법
  • 최소공배수 : a * b / 최대공약수

유클리드 호제법이란?
a > b 일 때,
a % b = r (나머지)
b % r = r2
r % r2 = r3
..
..
나머지가 0이 될 때 까지 반복한다.
이 때, 나머지를 0으로 만든 나눈 수가 최대공약수가 된다.

15 % 4 = 3
4 % 3 = 1
3 % 1 = 0

나머지가 0이 되었으므로 (15, 4)의 최대공약수는 1이다.

  • gcd = 최대공약수
  • lcm = 최소공배수

전체코드

function solution(n, m) {
    var answer = [];
    
    const gcd = (a, b) => a % b === 0 ? b : gcd(b, a % b);
    const lcm = (a, b) => a * b / gcd(a, b);
    answer = [gcd(n, m), lcm(n, m)]
    
    return answer;
}

출처 [프로그래머스] 최대공약수와 최소공배수 - Javascript

profile
토마토마토

0개의 댓글