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

JavaScript로 목표 평균을 만들기 위해 배열에 추가해야 할 숫자 구하기

문제 소개

숫자 배열과 하나의 숫자를 입력받는 JavaScript 함수를 작성해야 합니다. 이 함수가 해결해야 할 과제는, 배열에 추가했을 때 전체 배열의 평균이 두 번째 인수로 지정한 목표 값과 정확히 일치하도록 만드는 숫자를 찾아 반환하는 것입니다.

예를 들어 배열 [4, 20, 25, 17, 9, 11, 15]의 현재 평균은 약 14.43입니다. 여기에 목표 평균을 25로 만들려면 어떤 숫자를 추가해야 할까요? 아래 코드가 바로 그 답을 계산해 줍니다.

예제 코드

const arr = [4, 20, 25, 17, 9, 11, 15];
const target = 25;

function findNumber(arr, target) {
  let sum = arr.reduce((a, b) => a + b, 0);
  let avg = sum / arr.length;
  let next = Math.ceil((target * (arr.length + 1)) - sum);
  if (next <= 0) { throw new Error(); }
  return next;
}

console.log(findNumber(arr, target));

실행 결과

99

코드 동작 원리

이 알고리즘의 핵심은 수학적 관계에 있습니다. 새로운 숫자 하나가 배열에 추가되면 배열의 길이는 (length + 1)이 되고, 이때 전체 합계를 새 길이로 나눈 값이 목표 평균(target)이 되어야 합니다.

따라서 필요한 총합은 target × (배열 길이 + 1)이며, 여기서 기존 배열의 합계(sum)를 빼면 추가해야 할 숫자를 구할 수 있습니다.

  • reduce(): 배열의 모든 요소를 순회하며 합계를 계산합니다.
  • Math.ceil(): 계산 결과가 소수일 경우 올림하여 정수로 반환합니다.
  • 유효성 검사: 계산 결과가 0 이하라면 목표 평균을 달성할 수 없으므로 에러를 발생시켜 잘못된 입력을 방지합니다.

위 예제에서는 (25 × 8) − 101 = 99가 되므로, 배열에 99를 추가하면 전체 평균이 정확히 25가 됩니다.