알고리즘 맛보기

ㄷr r요·2023년 10월 20일

코딩테스트를 슬슬 조금씩 풀어보려고 시작하는데
굉장히 쉬운 문제부터 오류가 나서 놀랬다.
정말 어이없는 실수로 안되는 거 였음

function solution(arr) {
    var answer = 0;
    var sum = 0;
    for (var i = 0; i < arr.length; i++) {
        sum = sum + arr[i];
    }
    sum / arr.length = answer; // -> answer = sum / arr.length;
    return answer;
}

숫자로 이루어진 배열 평균 구하는 함수를 만드는데
7번째줄에... 너무 기본 숫자 연산식으로 생각하고 써내려가다가
저런 문장을 만들어 버려서 ChatGPT에 물어보고서야 바로 깨달아서 고침.

근데 이게 제일 기본 해답일뿐 더 간단한 식도 가능하다는 게 함정

다른 해답을 보던 중 새로 알게된 reduce 함수!!
안까먹게 잘 정리해봐야겠다.

reduce 함수

array.reduce(callback[, initialValue])
// [이건 선택값으로 없어도 됨]
  • array : recude를 적용할 배열
  • callback : 배열의 각 요소에 대해 실행할 콜백 함수. 콜백 함수는 다음 매개변수를 가진다.
    1) accumulator : 콜백 함수의 반환 값 또는 이전 순회에서의 최종 결과값. 초기 값(initialValue)이 제공된 경우 첫 번째 순회에서는 initialValue가 들어간다.
    2) currentValue : 현재 순회 중인 배열의 요소
    3) currentIndex (옵션) : 현재 순회 중인 배열의 요소 인덱트
    4) array (옵션) : reduce 함수가 호출된 배열
  • initialValue (옵션) : 콜백 함수의 첫 번째 순회에서 accumulator로 사용될 초기 값. 초기 값이 제공되지 않으면 배열의 첫 번째 요소가 초기 값이 된다.

이렇게만 읽었을 땐 잘 이해가 안가서 진땀 좀 뺐네
어쨌든 reduce 함수는 배열을 순회하면서 각 요소에 대해 콜백 함수를 실행시키고,
콜백 함수의 반환 값을 accumulator에 계속해서 누적시킨다.
그리고 순회가 완료되면 accumulator의 최종 값을 반환한다.

이해하고 나니 원래 알던 반복문의 다른 버전을 알게된 기분이다.

그래서 reduce함수로 간단하게 배열평균은 구하면

function solution(arr) {
    return arr.reduce((accum, current) => accum + current) / arr.length;
}

변수 선언 없이 return으로 바로 반환할 수도 있다는 걸 새롭게 알았다.
아직 화살표 함수도 익숙치 않아서 더 쓰기가 어렵게 느껴진다.

function solution(n){
    var answer = 0;
    while (n > 0) {
        answer = answer + n % 10;
        n = n / 10;
    }
    return answer;
}
profile
개발 공부

0개의 댓글