Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 합과 최대 공약수(GCD)가 주어졌을 때 두 수 찾기

문제 소개

두 개의 숫자를 입력으로 받는 JavaScript 함수를 작성해야 합니다. 첫 번째 숫자는 어떤 두 수의 을 나타내고, 두 번째 숫자는 그 두 수의 최대 공약수(HCF, GCD)를 나타냅니다.

함수는 이 조건을 동시에 만족하는 두 숫자를 찾아 배열 형태로 반환해야 하며, 만족하는 조합이 존재하지 않는 경우에는 -1을 반환해야 합니다.

접근 방법

핵심 아이디어는 아주 간단합니다. 두 수의 최대 공약수가 g라면, 두 수 모두 g로 나누어 떨어져야 하고, 따라서 그 합 역시 반드시 g로 나누어 떨어져야 합니다.

이 성질을 활용하면 다음과 같은 논리를 세울 수 있습니다.

  • 합(sum)을 GCD로 나눈 나머지가 0이 아니라면 → 조건을 만족하는 두 수는 존재하지 않으므로 -1을 반환합니다.
  • 나머지가 0이라면 → 한 수를 GCD 자체로, 다른 수를 (합 − GCD)로 정하면 됩니다. 이렇게 선택한 두 수의 합은 주어진 합과 같고, 두 수의 최대 공약수도 정확히 GCD와 일치합니다.

예제 코드

다음은 위 로직을 구현한 코드입니다.

const sum = 12;
const gcd = 4;
const findNumbers = (sum, gcd) => {
   const res = [];
   if (sum % gcd !== 0){
      return -1;
   }else{
      res.push(gcd);
      res.push(sum - gcd);
      return res;
   };
};
console.log(findNumbers(sum, gcd));

실행 결과

[4, 8]

코드 설명

위 예제에서 합은 12, 최대 공약수는 4입니다. 먼저 12 % 4의 결과가 0이므로 조건을 만족하는 두 수가 존재합니다. 따라서 함수는 첫 번째 수로 4(GCD), 두 번째 수로 8(12 − 4)을 담은 배열 [4, 8]을 반환합니다.

실제로 4와 8의 합은 12이며, 두 수의 최대 공약수 역시 4로 문제의 조건을 정확히 충족합니다. 만약 합이 GCD로 나누어 떨어지지 않는 값(예: sum = 13, gcd = 4)이 주어졌다면 함수는 -1을 반환하게 됩니다.