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

JavaScript로 두 수의 제곱합이 특정 값이 되는 쌍 [A, B] 찾기

짝수 길이의 정수 배열 arr를 입력으로 받아, 특정 조건을 만족하는 두 숫자의 쌍을 찾아 반환하는 JavaScript 함수를 작성해야 합니다.

문제 이해하기

배열에서 인접한 두 요소씩 짝지어 각 쌍의 제곱합을 구하고, 그 값들을 모두 곱한 수를 num이라고 정의합니다 −

num = (arr[0] * arr[0] + arr[1] * arr[1]) * (arr[2] * arr[2] + arr[3] * arr[3]) * … * (arr[n-2] * arr[n-2] + arr[n-1] * arr[n-1])

여기서 n은 배열의 길이입니다.

함수는 다음 등식을 만족하는 두 숫자 [A, B]를 찾아 반환해야 합니다 −

A2 + B2 = num

입출력 예시

배열이 다음과 같다고 가정해 보겠습니다 −

[1, 2, 3, 4]

그러면 num = (1 + 4) × (9 + 16) = 5 × 25 = 125가 됩니다.

따라서 함수의 출력은 다음과 같아야 합니다 −

[2, 11]

실제로 22 + 112 = 4 + 121 = 125이므로 조건을 만족합니다.

구현 코드

다음은 해당 문제를 해결하는 전체 코드입니다 −

const arr = [1, 2, 3, 4];
const findMatchingSumArray = (arr = []) => {
    let squaredSum = 1;
    for(let i = 0; i < arr.length - 1; i += 2){
        const curr = arr[i];
        const next = arr[i + 1];
        squaredSum *= (Math.pow(curr, 2) + Math.pow(next, 2));
    };
    for(let k = 0; k * k < squaredSum; k++){
        for(let j = 0; (k * k) + (j * j) <= squaredSum; j++){
            if((k * k) + (j * j) === squaredSum){
                return [k, j];
            };
        };
    };
    return [];
};
console.log(findMatchingSumArray(arr));

코드 동작 원리

이 알고리즘은 크게 두 단계로 진행됩니다.

1단계 — 목표값 계산: 첫 번째 반복문은 배열을 두 칸씩 건너뛰며 인접한 두 요소의 제곱합을 구하고, 그 결과를 누적으로 곱해 최종 목표값인 squaredSum을 산출합니다.

2단계 — 쌍 탐색: 중첩 반복문을 사용해 A2 + B2 = num을 만족하는 자연수 쌍을 하나씩 검사합니다. 조건에 부합하는 쌍을 발견하면 즉시 [k, j] 형태의 배열을 반환하며, 끝까지 찾지 못한 경우 빈 배열을 반환합니다.

출력 결과

코드 실행 시 콘솔에 출력되는 결과는 다음과 같습니다 −

[2, 11]