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

hyocho·2022년 6월 9일
0

코딩테스트

목록 보기
9/45

✅문제

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

  • 제한 사항
    두 수는 1이상 1,000,000이하의 자연수입니다.

💡주어진 솔루션

function solution(n, m) {
    var answer = [];
    return answer;
}

✍문제풀이

function solution(a, b) {
    return [gcd(a, b), lcm(a, b)];
}
function lcm(a, b){
    return (a * b) / gcd(a, b);
}
function gcd(a, b){
    if(b == 0) return a;
    return a > b ? gcd(b, a % b) : gcd(a, b % a);
}

✔️참고할 좋은 코드

function gcdlcm(a, b) {
    var r;
    for(var ab= a*b;r = a % b;a = b, b = r){}
    return [b, ab/b];
}
function gcd(a, b) {return b ? gcd(b, a % b) : Math.abs(a);}
function lcm(a, b) {return (a * b) / gcd(a, b);}
function gcdlcm(a, b) {
    return [gcd(a, b),lcm(a, b)];
}

b가 true일 때, 즉 0이 아니라면 자기 자신을 호출해 인자로 b, a % b를 넘겨 준다.
b가 false일 때는 Math.abs(a)를 리턴한다.

📝TIL

  • 유클리드 호제법

유클리드 호제법이란?
큰 두 수가 있을 때, 최대공약수를 구하기 위해 사용된다.
A를 B로 나눈 나머지를 r이라고 할 때, A와 B의 최대공약수는 B와 r의 최대공약수와 같다.

유클리드 호제법 알고리즘?
1. 매개변수로 a,b를 받는다.
2. b가 0이라면 a가 최대공약수
3. b가 0이 아니라면, 1의 매개변수에 'b'와 'a%b'를 전달한다.
4. 위 내용을 반복한다.


문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/12940
참고 페이지 :
1. https://themarketer.tistory.com/63
2. https://gobae.tistory.com/25
3. https://jaypedia.tistory.com/43

profile
기록하는 습관을 기르고 있습니다.

0개의 댓글