본문 바로가기

Coding Test/Programmers

[프로그래머스/JavaScript] 코딩 테스트 풀이 (문제 11 - 배열의 평균값)

728x90

 

# 문제 11 (배열의 평균값)

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.



# 답안

// 1. 입력: numbers -> 정수 배열 [1,2,3] 같은거 
// 2. 출력: numbers 원소의 평균값


// 방법1) fot...of문 사용
function solution(numbers) {
    let sum = 0;
    for (let value of numbers){
    sum += value
    }
    const answer = sum / numbers.length;
    return answer;
}


// 방법2) for문 사용
function solution(numbers) {

    let sum = 0
    for (let i = 0; i < numbers.length; i++) {
        sum += numbers[i]
    }
    const answer = sum / numbers.length;
    return answer;
}



# 인사이트 

// 평균값은 배열 내 요소들을 다 더한 뒤 개수 만큼 나누면 된다.

 

<방법1 과정>

ex. numbers = [1, 2, 3] 일 경우

- 첫번째 value는 1이므로, sum = 0 + 1 = 1이 된다.
- 두번째 value는 2이므로, sum = 1 + 2 = 3이 된다.
- 세번째 value는 3이므로, sum = 3 + 3 = 6이 된다.
- 배열의 모든 요소를 순회했으므로, 반복문이 종료된다.
sum / numbers.length는 6 / 3 이므로, 2가 변수 answer에 담겨서 return된다.

 


< 방법2 과정 >

ex. numbers = [1, 2, 3] 일 경우
-> numbers.length는 3이다.

- 변수 i는 값이 0이다. (begin 실행)
- i가 0이므로 (i < 3) 조건이 true가 된다. (condition이 truthy이면,)
- 반복문 본문(body)이 실행돼서 sum += numbers[i] 구문이 실행된다.
- numbers[0]은 1이므로, sum = 0 + 1 = 1이 된다.
- i가 1로 증가한다. (body를 실행 한 후, step을 실행함)

- i가 1이므로 (i < 3) 조건이 true가 된다. (condition이 truthy이면,)
- 반복문 본문(body)이 실행돼서 sum += numbers[i] 구문이 실행된다.
- numbers[1]은 2이므로, sum = 1 + 2 = 3이 된다.
- i가 2로 증가한다. (body를 실행 한 후, step을 실행함)


- i가 2이므로 (i < 3) 조건이 true가 된다. (condition이 truthy이면,)
- 반복문 본문(body)이 실행돼서 sum += numbers[i] 구문이 실행된다.
- numbers[2]은 3이므로, sum = 3 + 3 = 6이 된다.
- i가 3으로 증가한다. (body를 실행 한 후, step을 실행함)

- i가 3이므로 (i < 3) 조건이 false가 되고 반복문이 종료된다.
- 최종적으로 sum = 6이 나온다. (0 + 1 + 2 +3 )
- sum / numbers.length는 6 / 3 이므로, 2가 변수 answer에 담겨서 return된다.

 

 

 방법 1, 2 중에 어떤게 나을까? 

 

 for...of 루프는 가독성 측면에서 좋다. 그러나 배열의 크기가 커질수록 for...of 루프의 성능은 더 나은 반복문과 비교했을 때 약간 떨어질 수 있다. 

for 루프는 더 널리 사용되는 반복문이며, 배열의 크기에 관계없이 일정한 성능을 보장한다. 성능 측면에서는 더 우수하다. 

따라서 성능 측면에서 보면 for 루프가 더 나은 선택이다. 하지만 배열의 크기가 작은 경우에는 성능의 차이가 크게 나타나지 않으므로, 가독성이나 개발자의 개인 취향에 따라 선택할 수 있다.

 

 

728x90