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

문제 출처

Lv.1 최대공약수와 최소공배수 - JavaScript

문제 설명

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

제한 조건
  • 두 수는 1이상 1000000이하의 자연수입니다.
예시

입출력 예

n m return
3 12 [3, 12]
2 5 [1, 10]
풀이
// 최대공약수: 두 수가 서로 공통으로 가지고 있는 약수 중 가장 큰 수.
// 최소공배수: 두 수에 서로 공통으로 존재하는 배수 중 가장 작은 수.

function solution(n, m) {
  // 최대공약수의 기본값 1 설정
  let gcd = 1;

  // n(3)과 m(12) 중 작은 수 까지 for문을 돌린다.
  // i를 2로 설정해 둔 이유는 1을 돌 필요가 없기 때문.
  for (let i = 2; i <= Math.min(n, m); i++) {
    // n/i, m/i 둘의 나머지가 0이면 약수 이므로
    // i를 1씩 증가시키면서 최대공약수를 찾고 gcd변수에 담는다.
    if (n % i === 0 && m % i === 0) {
      gcd = i;
    }
  }

  // 최대공약수와 최소공배수의 관계를 보면 아래와 같은 공식이 있다.
  // 공식을 적용해 최소공배수를 찾아준다.
  let lcm = gcd * (n / gcd) * (m / gcd);

  // 배열에 담아 리턴한다.
  return [gcd, lcm];
}
console.log(solution(3, 12)); // [3, 12]
console.log(solution(2, 5)); // [1, 10]
정리

오늘은 최대공약수와 최소공배수를 구하는 방법에 대해 알아봤습니다. 수학적 문제여서 수학을 모른다면 조금 어려웠을거라 생각합니다.. 저 또한…
사용된 메서드와 문법에 대해 더 공부하고 싶으신 분은 링크를 클릭해주세요!

for 문 - MDN
나머지 (%) - MDN
Math.min() 메서드 - MDN

피드백은 언제나 환영입니다. 😊