문제 이해하기
숫자 n을 입력받아, 세 개의 연속된 자연수(소수나 실수가 아닌 정수)의 합이 정확히 n이 되는 경우가 존재하는지 확인하는 JavaScript 함수를 작성해야 합니다.
만약 그러한 숫자들이 존재한다면 함수는 해당 세 숫자를 반환하고, 존재하지 않는다면 false를 반환해야 합니다.
접근 방법
세 개의 연속된 자연수를 각각 x, x+1, x+2라고 표현할 수 있습니다. 이들의 합은 다음과 같습니다.
x + (x + 1) + (x + 2) = 3x + 3
따라서 해가 존재하려면 n은 반드시 3으로 나누어떨어져야 하며, 가장 작은 세 자연수의 합이 1+2+3=6이므로 n은 최소 6 이상이어야 합니다. 조건을 만족한다면 첫 번째 숫자는 (n - 3) / 3으로 계산할 수 있습니다.
예제 코드
이를 구현한 코드는 다음과 같습니다 −
const sum = 54;
const threeConsecutiveSum = sum => {
if(sum < 6 || sum % 3 !== 0){
return false;
}
// 세 숫자는 다음 형태를 가집니다:
// x + (x + 1) + (x + 2) = 3 * x + 3
const residue = sum - 3;
const num = residue / 3;
return [num, num+1, num+2];
};
console.log(threeConsecutiveSum(sum));
출력 결과
콘솔에 출력되는 결과는 다음과 같습니다 −
[ 17, 18, 19 ]
입력값이 54일 때, 54는 6보다 크고 3으로 나누어떨어지므로 해가 존재합니다. 실제로 17 + 18 + 19 = 54이며, 함수는 연속된 세 자연수 배열 [17, 18, 19]를 반환합니다. 만약 입력값이 6 미만이거나 3으로 나누어떨어지지 않는다면 함수는 false를 반환합니다.