티스토리 뷰

문제

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

제한 사항

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

입출력 예

n m return
3 12 [3, 12]
2 5 [1, 10]

입출력 예 설명

  • 입출력 예 #1
    위의 설명과 같습니다.

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

접근

차례로 최대공약수와 최소공배수를 구하고 answer에 push한다.

약수는 어떤 값을 나누어 떨어지게 하고

배수를 어떤 값으로 나누면 나누어 떨어진다.

n, m 중 작은 값의 약수 중에서 가장 큰 수가 최대공약수다.

최소 공배수는 1n, 2n, 3n, ... 1m, 2m, 3m, ... 중 가장 작은 수다. 무한루프와 종료조건을 활용하자.

구현

const solution = (n, m) => {
    let answer = [];
    let gcm = 1;
    let lcm = 1;

    // 최대공약수
    // 작은 숫자의 약수 중 최대값이 최대공약수
    for (let i = 1; i <= Math.min(n, m); i++) {
        // 약수는 어떠한 값을 나누어 떨어지게 한다.
        if ((n % i) === 0 && (m % i) === 0) {
            gcm = i;
        }
    }
    answer.push(gcm);

    // 최소공배수
    while (true) {
        // 배수는 해당 값으로 나누면 나누어 떨어진다.
        if ((lcm % n === 0) && (lcm % m === 0)) {
            answer.push(lcm);
            break;
        }
        lcm++;
    }    
    return answer;
};
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함