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

자바스크립트로 최대 둘레를 만드는 삼각형의 세 변 선택하기

삼각형의 둘레(perimeter)란 세 변의 길이를 모두 더한 값입니다. 이번 문제에서는 최소 세 개 이상의 숫자를 담은 배열을 입력받아 처리하는 자바스크립트 함수를 작성해야 합니다.

작성할 함수는 배열에서 가장 긴 세 변(가장 큰 숫자)을 골라 그 합이 최대 둘레가 되도록 해야 하며, 동시에 선택된 세 변이 실제로 삼각형을 형성할 수 있는지 반드시 검증해야 합니다. 만약 배열 안에서 유효한 삼각형을 만들 수 있는 세 변이 존재하지 않는다면 0을 반환하면 됩니다.

여기서 유효한(valid) 삼각형이란, 어떤 두 변의 길이 합이 항상 나머지 한 변보다 커야 하는 삼각형을 의미합니다.

예제 코드

const arr = [1, 2, 3, 5, 6, 7, 9];
const largestPerimeter = (arr = []) => {
    arr.sort((a, b) => a - b);
    let max = 0;
    for (let i = arr.length - 1; i >= 2; i--) {
        let start = i - 2;
        let end = i - 1;
        while (start < end) {
            if (arr[end] + arr[start] > arr[i]) {
                return arr[end] + arr[start] + arr[i];
            }
            else {
                start++;
            };
        };
    };
    return 0;
};
console.log(largestPerimeter(arr));

동작 원리

위 코드는 다음과 같은 단계로 동작합니다.

먼저 배열을 오름차순으로 정렬한 뒤, 가장 큰 값부터 역순으로 순회하면서 해당 값을 가장 긴 변으로 가정합니다. 그다음 남은 두 변의 조합을 확인하여, 두 변의 합이 가장 긴 변보다 크다면 삼각형 부등식이 성립하므로 즉시 세 변의 합을 반환합니다. 끝까지 조건을 만족하는 조합을 찾지 못하면 0을 반환합니다.

출력 결과

콘솔에 출력되는 결과는 다음과 같습니다.

22

배열 [1, 2, 3, 5, 6, 7, 9]에서 가장 긴 세 변인 7, 9와 그 앞의 6을 선택하면 6 + 7 > 9가 성립하므로 유효한 삼각형이 되고, 둘레는 6 + 7 + 9 = 22가 됩니다.