자바스크립트 코딩테스트 강좌, 평균 구하기

문제 설명

주어진 숫자들의 배열이 있을 때, 이 숫자들의 평균을 계산하는 함수를 작성하세요.
평균은 모든 숫자의 합을 숫자의 개수로 나눈 값입니다.
배열이 비어있을 경우에는 예외 처리를 하여 적절한 메시지를 반환해야 합니다.

문제 예시

        입력: [1, 2, 3, 4, 5]
        출력: 3

        입력: []
        출력: "배열이 비어 있습니다."
    

알고리즘 접근 방법

이 문제를 해결하기 위해, 다음과 같은 단계를 거칩니다:

  1. 입력 배열이 비어 있는지를 확인합니다.
  2. 배열의 각 요소를 순회하며 합계를 계산합니다.
  3. 배열의 길이를 구하여, 평균을 계산합니다.
  4. 최종적으로 구한 평균 값을 반환합니다.

자바스크립트 코드 구현

이제 각 단계를 자바스크립트로 구현해보겠습니다.


function calculateAverage(numbers) {
    // 입력 배열이 비어 있는지 확인
    if (numbers.length === 0) {
        return "배열이 비어 있습니다.";
    }
    
    // 합계를 저장할 변수
    let sum = 0;
    
    // 배열의 각 요소를 순회하며 합계 계산
    for (let i = 0; i < numbers.length; i++) {
        sum += numbers[i];
    }
    
    // 평균 계산
    const average = sum / numbers.length;
    
    // 평균 반환
    return average;
}

// 예시 테스트
console.log(calculateAverage([1, 2, 3, 4, 5])); // 출력: 3
console.log(calculateAverage([])); // 출력: "배열이 비어 있습니다."
    

문제 해결 과정 상세 설명

1단계: 입력 배열 확인

첫 번째 단계에서는 주어진 배열이 비어 있는지를 확인합니다.
만약 배열의 길이가 0이라면, 함수는 즉시 “배열이 비어 있습니다.”라는 문자열을 반환합니다.
이는 사용자가 입력 배열을 잘못 지정했을 경우에 대한 예외 처리입니다.

2단계: 합계 계산

배열이 비어있지 않다면, 다음 단계로 넘어가 합계를 계산합니다.
여기서는 sum이라는 변수를 0으로 초기화한 다음, 배열의 각 요소를 순회하면서
그 값을 합산합니다. 배열의 길이는 numbers.length로 확인할 수 있습니다.

3단계: 평균 계산

합산이 완료되면, 배열의 길이로 합계를 나누어 평균 값을 계산합니다.
이 과정에서 const average = sum / numbers.length;와 같이 계산식을 작성할 수 있습니다.
평균은 소수 부분을 포함할 수 있으므로, 별도로 소수점 이하의 자리수를 조정할 필요가 없으면 이렇게 간단히 반환하면 됩니다.

4단계: 결과 반환

마지막 단계에서는 계산된 평균 값을 반환합니다.
이 값은 호출한 쪽에서 출력할 수 있도록 console.log나 다른 방법으로 활용할 수 있습니다.

결과 및 복습

이와 같이 평균을 구하는 알고리즘은 배열의 길이가 0인지 확인하는 예외 처리와
순회하여 합을 구하는 단순한 방법으로 구현됩니다.

복습해보면, 평균을 구하는 과정은 괄호 내 모든 숫자를 더한 후, 그 값을
숫자의 수로 나누어서 도출합니다.
이 과정에서 예외 상황을 처리하는 것은 실제 코딩 테스트에서 매우 중요하므로
항상 유의해야 합니다.

어려움 극복하기

이 문제를 해결하는 동안 고려해야 할 점은 아래와 같습니다.

  • 입력 배열이 항상 숫자로 이루어져 있는지 확인 필요
  • 예외 처리 시 반환할 메시지 또는 값을 일관성 있게 정의
  • 숫자가 아닌 요소가 포함된 경우 처리 방법 고려

코딩 테스트를 진행할 때, 위와 같은 예외 상황들을 항상 염두에 두어야
문제가 발생할 확률을 줄일 수 있습니다.

마무리

평균 구하기 문제는 간단하지만, 다양한 예외 상황과 조건을 고려해야
하므로 항상 주의 깊게 접근해야 합니다. 연습을 통해 알고리즘을 보다
효과적으로 구현할 수 있을 것입니다.

혹시 더 궁금한 사항이나 의문이 있다면 댓글로 남겨주세요!
다음 시간에는 다른 알고리즘 문제를 가지고 찾아뵙겠습니다.