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

J.A.Y·2023년 11월 16일
0

자료구조/알고리즘

목록 보기
9/17
post-thumbnail

최대공약수와 최소공배수

문제 설명:

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

제한 사항:

  • 두 수는 1이상 1000000이하의 자연수입니다.

입출력 예:

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

입출력 예 설명:

  1. 위의 설명과 같습니다.

  2. 자연수 2와 5의 최대공약수는 1, 최소공배수는 10이므로 [1, 10]을 리턴해야 합니다.

풀이

  • 문제 풀이 전략(2):
    (1) 2개의 자연수 a, b(a > b)에 대해서 a를 b로 나눈 나머지가 r일 때, a와 b의 최대공약수는 b와 r의 최대공약수와 같다.
    (2) 두 수 a와 b의 최소공배수는 a와 b의 곱을 a와 b의 최대공약수를 나눈 것과 같다.
function solution(n, m) {
    var answer = [];
    let a = 0;
    let b = 0;
    let r = 0;
    if(n > m) {
        a = n
        b = m
    } else {
        a = m
        b = n
    }
    // (a>b)
    // a를 b로 나눈 나머지 = r
    // a과 b의 최대공약수 = r과 b의 최대공약수 , 즉 나머지가 0이 나올때까지 나눈 수가 최대공약수이다.
    while(b !== 0) {
        r = a%b
        a = b
        b = r
    }
    answer.push(a)
    
    // n*m = nm
    // nm / n과 m의 최대공약수 = n과 m의 최소공배수
    const 최소공배수 = (n * m) / a
    answer.push(최소공배수)
    
    return answer;
}
profile
Done is better than perfect🏃‍♀️

0개의 댓글