삼각형의 둘레(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가 됩니다.