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

JavaScript로 합과 곱이 주어진 두 숫자 찾기 – 함수 구현 방법

두 개의 숫자 m(곱)n(합)을 매개변수로 받아, 두 수의 합이 n이고 곱이 m이 되는 숫자 쌍을 배열로 반환하는 JavaScript 함수를 작성해 보겠습니다. 만약 조건을 만족하는 숫자 쌍이 존재하지 않는다면 함수는 false를 반환해야 합니다.

접근 방식

가장 직관적인 해결 방법은 완전 탐색(Brute Force)입니다. 첫 번째 숫자를 0부터 n/2까지 반복하면서 확인하고, 두 번째 숫자는 자동으로 (n − i)가 됩니다. 각 반복마다 i × (n − i)의 값이 곱 m과 일치하는지 검사하여, 일치하는 순간 해당 숫자 쌍을 즉시 반환하면 됩니다.

코드 구현

const perfectNumbers = (sum, prod) => {
   for(let i = 0; i < (sum / 2); i++){
      if(i * (sum-i) !== prod){
         continue;
      };
      return [i, (sum-i)];
   };
   return false;
};
// 12와 12는 서로 다른 두 숫자가 아니므로 제외됨
console.log(perfectNumbers(24, 144));
console.log(perfectNumbers(14, 45));
console.log(perfectNumbers(21, 98));

실행 결과

위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.

false
[ 5, 9 ]
[ 7, 14 ]

결과 분석

1. perfectNumbers(24, 144)
12 + 12 = 24이고 12 × 12 = 144이지만, 두 숫자가 동일한 값이므로 유효한 숫자 쌍으로 간주하지 않고 false를 반환합니다. 반복문이 n/2 미만까지만 실행되기 때문에 두 수가 같은 경우는 자연스럽게 제외됩니다.

2. perfectNumbers(14, 45)
5 + 9 = 14이고 5 × 9 = 45이므로 조건을 만족하는 [5, 9]를 반환합니다.

3. perfectNumbers(21, 98)
7 + 14 = 21이고 7 × 14 = 98이므로 [7, 14]를 반환합니다.

시간 복잡도

이 알고리즘은 최악의 경우 n/2번 반복하므로 시간 복잡도는 O(n)입니다. 입력 범위가 크지 않은 경우에는 충분히 효율적이며, 코드가 단순하고 이해하기 쉬운 장점이 있습니다.