코딩 테스트/프로그래머스

❌[JS] 배열 평균 값 구하기 : reduce(), for..of문

감귤밭호지차 2023. 1. 14. 18:20

 아직 해결되지 않은 궁금증이 있는 게시물 : 클릭

 

▶ 문제 설명

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

 

 조건

0 <= numbers의 원소 <= 1,000

1 <= numbers의 길이 <= 100

정답의 소수 부분이 .0 또는 .5인 경우만 입력으로 주어짐

 

 

 

#  내가 처음 짠 코드 

function solution(numbers) {
    var answer = 0;
    var sum = 0; 
    for ( let i = 0; i< numbers.length; i++){
        sum += numbers[i];
        var answer = (sum/numbers.length).toFixed(1);
    }
    
    if((answer%1).toFixed(1) == 0.5 || (answer%1).toFixed(1) == 0){
        return answer;
    }else {
        return false;
    }
}

💡회고

원하는 값에 접근은 할 수 있으나, 굉장히 복잡하게 코드를 작성한 듯 하다. 배열의 평균 값을 구하기 위해 구글링 하다가 reduce()란 간편한 함수가 있었지만 한번 내가 알고 있는 수준에서 풀어보고자 노력했더니 요로콤 나와버렸다. 어쨌든 머리를 써서 혼자서 풀었다는데에 의의를 두었다. 

 

이번 코드에서 중요한 포인트는 내가 주로 햇깔리는 for문 안에서 변수 초기화랄까. sum = 0; 을 자꾸 빼먹거나 for문안에 넣어서 값을 돌려도 계속 초기화 되서 원하는 합산을 구할 수 없었다. 이 점을 계속 주의해야 겠다. 

 

조건 마지막의 값이 0.5나 .0만 입력으로 주어진다는 게 그것만 답으로 되게 하라인 줄 알았는데 그냥 모든 답이 .0이나 .5로 나온다는 의미였나보다.. 

 


 

 

 

# 다른 사람들의 번뜩이는 코드 방식(1)

function solution(numbers) {
    var answer = 0;
    for(i of numbers) {
        answer += i
    }
    return answer / numbers.length;

}

🪄for문 속 of 사용

 

 

# 다른 사람들의 번뜩이는 코드 방식(2)

function solution(numbers) {
    var answer = numbers.reduce((a,b) => a+b, 0) / numbers.length;   
    return answer;
}

🪄reduce() 함수 사용.

 

🧐근데 왜 굳이 initialValue 0을 지정해준걸까. 여기서는 굳이 작성하지 않아도 되지 않나? 

 

 

 

 

 

✔️사용한 함수 

 

①  reduce( ) 

     배열을 다루는 메소드 중 하나. 누적값(accumulator)과 현재갑(currentValue)을 인자로 가짐. 

     

     arr.reduce( callback [, initialValue] )

     const 함수1 = ( accumulator, currentValue) => accumulator + currentValue;

 

    배열.reduce(함수1)  : 배열 안에 요소들을 모두 더한 값을 반환 합니다. 

    배열.reduce(함수1, 0)   : initialValue로 0을 지정해서 +0 시작으로 배열의 요소들을 더한 값을 반환합니다.

 

    

 

 

② for... of

     (Array, Map, Set, STring, TypedArray, Arguments)객체 등에 반복해서 각 개별 속성 값에 접근.

     

     for( const 변수이름지정 of 배열이름 ) {  }   

      

 

 

✳️참고 링크 :  모든 배열의 요소 더하기 : reduce()

✳️참고 링크 : MDN - for...of