저장을 습관화

프로그래머스 LV.0 배열의 평균값 본문

코딩 테스트/프로그래머스 - 자바스크립트

프로그래머스 LV.0 배열의 평균값

ctrs 2023. 6. 9. 00:41

프로그래머스 LV.0 배열의 평균값

https://school.programmers.co.kr/learn/courses/30/lessons/120817

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 문제 명

배열의 평균값


2. 문제 설명

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


3. 제한 사항

0 ≤ numbers의 원소 ≤ 1,000

1 ≤ numbers의 길이 ≤ 100

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


4. 예시

numbers result
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 5.5
[89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] 94.0


5. 기본 제공 코드

function solution(numbers) {
    var answer = 0;
    return answer;
}


6. 제출한 내 답

function solution(numbers) {
  var answer = 0;
  for (i = 0; i < numbers.length; i++) {
    answer += numbers[i];
  }
  answer /= numbers.length;
  return answer.toFixed(1);
}

 

6-2. VSC에 작성한 내용

function solution(numbers) {
  var answer = 0;
  for (i = 0; i < numbers.length; i++) {
    answer += numbers[i];
  }
  answer /= numbers.length;
  return answer.toFixed(1);
}

//test

let arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let arr2 = [89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99];

console.log(solution(arr1));
console.log(solution(arr2));


7. 특이사항

쉬울거라 생각하고 시작했다가 의외로 오래걸렸다.

 

원인은 코드의 시작을 var answer = numbers라고 시작하는 어처구니 없는 짓 때문이었다.

answer는 숫자열이라고 프로그래머스에서 주는 힌트인데 그걸 걷어차버렸다.

아니 진짜 왜 그랬지?

function solution(numbers) {
  var answer = numbers;
  for (i = 0; i < numbers.length; i++) {
    answer += numbers[i];
  }
  return answer
}

위와 같이 작성해놓고 테스트 실행 내내 결과가 NaN만 나온다고

parseInt(numbers[i]), Number(numbers[i]) 라고 쓰는 등 괜히 애꿎은 숫자만 괴롭혔다.

 

그럼 뭐하냐고 바로 더하는 answer가 배열인데

더해봤자 string이지

 


8. 다른 사람이 작성한 답

8-1. reduce

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

자바스크립트의 reduce 함수는 배열의 각 요소를 순회하며 콜백함수의 실행값을 누적하여 하나의 결과값을 반환한다.

 

8-2. 

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

}

 

다른 사람들은 대부분 reduce를 사용했더라

진짜 멍청하니 갈길이 멀다라는 생각 뿐이다.