[프로그래머스] 배열의 평균값

백승연·2023년 12월 12일
0
post-thumbnail

🗒️ 문제

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

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

제한 사항

  • 0 ≤ numbers의 원소 ≤ 1,000
  • 1 ≤ numbers의 길이 ≤ 100
  • 정답의 소수 부분이 .0 또는 .5인 경우만 입력으로 주어집니다.

입출력 예

numbersresult
[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

입출력 예 설명

입출력 예 #1

numbers의 원소들의 평균 값은 5.5입니다.

입출력 예 #2

n이 4이므로 2 + 4 = 6을 return 합니다.


🖋️ 나의 풀이

function solution(numbers) {
    let result = 0;
    for(let i=0; i<numbers.length; i++) {
        result+=numbers[i];
    }
    return (result/numbers.length);
}

💡 다른 사람들의 풀이

reduce()를 이용하여 푼게 신기해서 가져옴
역시 많이 알아야 제일 효율적으로 풀 수 있는거구나

# 1

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

# 2

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

}



📝 모르는 내용 찾아보기

reduce()란?

배열을 기반으로 하나의 결과값을 도출할 때 사용되는 함수이다.
함수를 실행하면 하나의 결과값만 반환한다.
기본적으로 아래와 같은 형태를 가진다.

array.reduce(callback[, initialValue])

1. 초기값이 없는 가장 단순한 형태

아래 두 개의 코드는 서로 같은 코드이다. return을 생략하고 작성했는지 안했는지의 차이

  • acc : 누적되는 값. 최종적으로 출력되는 값 (누산기)
  • cur : 현재 요소
const numbers = [1, 2, 3, 4];
let sum = numbers.reduce((acc, cur) => acc + cur);
const numbers = [1, 2, 3, 4];
let sum = numbers.reduce((acc, cur) => {
	return acc + cur;
});

위 함수의 동작 방식은 아래와 같다.

acc += cur; // 1 += 2;
acc += cur; // 3 += 3;
acc += cur; // 6 += 4;
console.log(acc); // 10

2. 초기값이 있는 기본적 형태

  • acc : 누적되는 값. 최종적으로 출력되는 값 (누산기)
  • cur : 현재 요소
  • initialValue : acc의 초기값 (optional)
const numbers = [4, 3, 2, 1];
let sum = numbers.reduce((acc, cur) => acc + cur, 0);
console.log(sum);

이와 같이 초기값을 설정하면 index가 1부터가 아니라 0부터 들어가게 된다.

acc += cur; // 0 += 1;
acc += cur; // 1 += 2;
acc += cur; // 3 += 3;
acc += cur; // 6 += 4;
console.log(acc); // 10

for...of 란?

써본적도 있는 코드인데 맨날 헷갈려서 다시 정리해볼 겸 찾아봤다.

for of는 배열을 포함한 iterable객체를 순회하는 반복문이다.

그럼 for...in은? forEach()는?

for in은 객체의 프로퍼티. 키값을 순회하는 반복문이고,
forEach()는 배열을 순회하는 전용 메서드이다.

1. for...of 예시

let arr = ["1", "2", "3"];
for (let item of arr) {
	console.log(item); // 1, 2, 3
}

2. for...in 예시

let obj = {
	a: 1,
  	b: 2,
  	c: 3
};

for (let prop in obj) {
	console.log(prop); // a, b, c
  	console.log(obj[prop]); // 1, 2, 3
}

만약 배열에서 for...in을 사용하게 되면 배열의 요소만 출력되는 for...of와 달리 모든 요소가 출력된다.

Object.prototype.objCustom = function () {};   //Object 프로토타입에 커스텀 속성 추가
Array.prototype.arrCustom = function () {};    //Array 프로토타입에 커스텀 속성 추가

let iterable = [1, 2, 3];
iterable.foo = "hello";           //배열객체에 foo 속성 추가 및 값 할당.

console.log("for.. in 반복 결과");
for (let i in iterable) {
  console.log(i); // 0, 1, 2, foo, arrCustom, objCustom
  // 인덱싱 순서를 보장할 수 없음
}

console.log("for.. of 반복 결과");
for (let i of iterable) {
  console.log(i); // 1, 2, 3
}

3. forEach() 예시

const arr = ["1", "2", "3"];

arr.forEach(element => {
  document.write(element); // 1, 2, 3
});
profile
공부하는 벨로그

0개의 댓글