[코딩테스트 연습] 최대공약수와 최소공배수


최대공약수와 최소공배수

문제 설명

두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, 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]을 리턴해야 합니다.


코드 작성

function solution(n, m) {
  let a = m;
  let b = n;
  if (n > m) {
    a = n;
    b = m;
  }
  let r = 0;
  while (a % b != 0) {
    r = a % b;
    a = b;
    b = r;
  }
  return [b, (n * m) / b];
}

[ TIP ]
유클리드 호제법을 활용하였다.
2개의 자연수 a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면(단, a>b), a와 b의 최대공약수는 b와 r의 최대공약수와 같다. 이 성질에 따라, b를 r로 나눈 나머지 r’를 구하고, 다시 r을 r’로 나눈 나머지를 구하는 과정을 반복하여 나머지가 0이 되었을 때 나누는 수가 a와 b의 최대공약수이다.
자연수 a, b의 최소공배수는 a와 b의 곱을 a와 b의 최대공약수를 나눈 것과 같다.


[ while문 ]
while문은 조건문이 참일 때 실행되는 반복문이다. 조건은 문장안이 실행되기 전에 참, 거짓을 판단한다.

  • 조건: 반복이 시작되기 전에 조건문은 참,거짓을 판단받게 된다. 만약 조건문이 참이라면, while문 안의 문장들이 실행된다. 거짓이라면, 문장은 그냥 while 반복문 후로 넘어간다.
  • 문장: 조건문이 참일 때만 while문 속의 문장들이 실행된다. 반복문 속에 여러개의 문장을 사용하고 싶다면 중괄호 { } 를 통해 문장들을 하나로 묶어야 한다.
while (condition) {
  statement;
}





© 2023. by MyeongheeJung

Powered by MH.J