두 개의 숫자 m과 n을 입력받아, 합이 n이 되고 곱이 m이 되는 두 숫자를 반환하는 JavaScript 함수를 작성해 보겠습니다. 만약 조건을 만족하는 숫자 쌍이 존재하지 않는다면 함수는 false를 반환해야 합니다.
문제 접근 방법
가장 직관적인 풀이는 완전 탐색(Brute Force)입니다. 두 수의 합을 sum, 곱을 prod라고 할 때, 한쪽 숫자를 i로 정하면 나머지 하나는 자동으로 sum - i로 결정됩니다. 따라서 i를 0부터 sum / 2까지 순회하면서 i * (sum - i)가 prod와 일치하는지만 확인하면 됩니다.
구현 예제
코드는 다음과 같습니다.
const goldenNumbers = (sum, prod) => {
for(let i = 0; i < (sum / 2); i++){
if(i * (sum-i) !== prod){
continue;
};
return [i, (sum-i)];
};
return false;
};
console.log(goldenNumbers(24, 144));
console.log(goldenNumbers(14, 45));
console.log(goldenNumbers(21, 98));실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
false
[ 5, 9 ]
[ 7, 14 ]
결과 해석
goldenNumbers(14, 45)는 5 + 9 = 14이고 5 × 9 = 45이므로 [5, 9]를 반환하고, goldenNumbers(21, 98)은 7 + 14 = 21이고 7 × 14 = 98이므로 [7, 14]를 반환합니다. 반면 goldenNumbers(24, 144)는 탐색 범위 안에서 조건을 만족하는 쌍을 찾지 못해 false를 반환합니다.
주의할 점: 두 수가 같은 경우
위 코드는 반복 조건을 i < sum / 2로 설정했기 때문에 두 수가 정확히 같은 경우(예: 12 + 12 = 24, 12 × 12 = 144)는 탐색하지 못한다는 한계가 있습니다. 이러한 케이스까지 처리하려면 반복 조건을 i <= sum / 2로 변경하면 됩니다.