최대공약수와 최소공배수

강동휘·2022년 11월 29일
0

프로그래머스

목록 보기
3/6
post-thumbnail

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

function solution(n, m) {
  //최대공약수: 두 수의 공통되는 약수 중에서 가장 큰수
  //최대공배수: 두 수의 공통되는 배수 중에서 가장 작은수

  //최대공약수 구하기
  let max = 0;
  for (let i = 1; i <= m; i++) {
    if (n % i === 0 && m % i === 0) {
      max = i;
    }
  }
  //최소공배수 구하기
  let min = 0; //공배수중에서 제일 작은 수만 저장
  for (let i = m; i <= n * m; i += m) {
    if (i % n === 0 && i % m === 0) {
      min = i;
      break; //하나찾자마자 break
    }
  }
  return [max, min];
}

//
function solution(n, m) {
  //유클리드 호제법
  //최대 공약수를 구하기 위한 알고리즘 (공식)

  //a를 b로 나눴을 때 (a가 b보다 클 경우) === 큰수에서 작은 수를 나눴을 떄
  //나머지 값이 0이 되면, 작은 수 (b)가 최대공약수가 된다.
  //나머지 값이 0이 되지 않으면, 작은 수 (b)가 큰수 (a)가되고
  //나머지 값이 작은 수가 (b)가 된다.
  //반복했을 때에 나머지 값이 0이 나오면, 작은 수 (b)가 최대공약수가 된다.;;

  let a = m; //큰 수
  let b = n; //작은 수
  let r = 0; //큰 수를 작은 수로 나웠을 때의 나머지 값

  while (a % b > 0) {
    r = a % b; //큰 수에서 작은 수를 나눈 나머지 값을 저장
    a = b; //큰 수를 나눴을 떄의 작은 수를 가져온다.
    b = r; //작은 수에는 나머지 값을 가져온다.
  }
  //최소 공배수는 두수를 곱한 수에 최대공약수를 나눠준 몫의 값

  return [b, (n * m) / b];
}

function solution(n, m) {
  var answer = [];
  let big = 0;
  let least = 0;

  if (n % m === 0 || m % n === 0) {
    big = Math.min(n, m);
    least = Math.max(n, m);
    console.log(big, least);
  } else {
    for (let i = 1; i < Math.max(n, m); i++) {
      if (n % i === 0 && m % i === 0) {
        big = i;
      }
    }
    least = (n * m) / big;
  }

  answer.push(big, least);
  return answer;
}

profile
👨🏻‍💻프론트엔드에서 pm으로 커리어 전향을 희망하는

0개의 댓글