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

JavaScript로 직사각형 속 정사각형들의 둘레 합 구하기

문제 소개


다음 그림처럼 하나의 큰 직사각형 안에 5개의 정사각형이 차곡차곡 포개어 배치되어 있다고 가정해 보겠습니다.

JavaScript로 직사각형 속 정사각형들의 둘레 합 구하기

이 정사각형들은 각 변의 길이가 1, 1, 2, 3, 5로 이어지는 피보나치 수열 구조를 띠고 있습니다. 따라서 각 정사각형의 둘레를 모두 더하면 다음과 같습니다.

4 + 4 + 8 + 12 + 20 = 48 단위

즉, 우리가 작성해야 할 것은 숫자 n을 입력받아, 직사각형 안에 n개의 정사각형이 배치되어 있을 때 전체 둘레의 합을 반환하는 JavaScript 함수입니다.

접근 방법

정사각형의 변의 길이가 피보나치 수열을 따르기 때문에, 배열에 수열의 값을 하나씩 추가하면서 동시에 누적합을 계산하는 방식으로 문제를 해결할 수 있습니다. 모든 변의 길이의 합을 구한 뒤 4를 곱하면 전체 둘레의 합이 됩니다.

예제 코드

const num = 6;
const findPerimeter = (num = 1) => {
    const arr = [1, 1];
    let n = 0;
    let sum = 2;
    for (let i = 0; i < num - 1; i++) {
        n = arr[i] + arr[i + 1];
        arr.push(n);
        sum += n;
    };
    return sum * 4;
};
console.log(findPerimeter(num - 1));

실행 결과

80

코드 설명

배열 arr은 첫 두 정사각형의 변의 길이인 1과 1로 초기화하고, 변수 sum은 해당 값들의 합인 2로 시작합니다. 반복문에서는 앞의 두 항을 더한 새로운 피보나치 수를 배열에 추가하고, 동시에 누적합에 더해 줍니다. 반복이 끝나면 총합에 4를 곱해 전체 둘레의 합을 반환합니다.

위 예제에서는 변의 길이가 1, 1, 2, 3, 5, 8인 6개의 정사각형에 대한 둘레의 합, 즉 (1 + 1 + 2 + 3 + 5 + 8) × 4 = 80이 출력됩니다. 이처럼 피보나치 수열의 성질만 파악하면 반복문 하나로 간단하게 해결할 수 있는 문제입니다.