Front-End

vsoghlv@naver.com

알고리즘 최대공약수와 최소공배수

문제 설명

두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, 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) {
  var answer = new Array(2);
  //최대공약수
  for (let i = 1; i <= n; i++) {
    if (m % i === 0 && n % i === 0) {
      answer[0] = i;
    }
  }
  //최소공배수
  let min = 1;
  while (true) {
    if ((m * min) % n === 0) {
      answer[1] = m * min;
      break;
    }
    min++;
  }

 //console.log(answer);
  return answer;
}

최대 공약수는 먼저 n 보다 작아야 되기 때문에 n만큼 반복문을 돌며 n, m 두가지를 i 로 나눈 경우 나머지가 0 인 경우를 구했다.

최소 공배수는 처음에 for 문을 사용했는데 조건에 실수를 했던 건지 계속 오류가 나서 while 문으로 변경 후 조건에 true 를 주고 if 문에 들어가는 경우 break 처리를 했다.

하나의 변수를 주고 그 변수 곱하기 m 을 n 으로 나눈 나머지가 0 인 것을 최소 공배수로 설정하도록 조건문을 주고, 만약 조건에 부합하지 않으면 변수의 값을 더하도록 했다.