[Lv.1]내적

Jihyun-Jeon·2022년 3월 6일
0

문제: https://programmers.co.kr/learn/courses/30/lessons/70128

🔶내가 한 방법

  • for문을 돌면서 각 배열의 인덱스값에 접근함.
function solution(a, b) {
  let result = 0;
  for (let i = 0; i < a.length; i++) {
    result += a[i] * b[i];
  }
  return result;
}

// 실행
console.log(solution([1, 2, 3, 4], [-3, -1, 0, 2])); // 3
console.log(solution([-1, 0, 1], [1, 0, -1])); // -2

🔶다른사람 풀이

  • reduce 활용
function solution(a, b) {
    return a.reduce((acc, _, i) => acc += a[i] * b[i], 0);
}

🔶피드백

1. reduce()공부하기

Array.prototype.reduce() :누적 계산의 결과 값(acc)가 나옴

//<초기값이 없는 경우>
[0, 1, 2, 3, 4].reduce(function(acc, cur, Index, arr) {
  return accumulator + currentValue;
});

callback	accumulator	currentValue	currentIndex	    array	         반환 값
1번째 호출	  0	             1	           1         	[0, 1, 2, 3, 4]	        1
2번째 호출	  1	             2	           2	        [0, 1, 2, 3, 4]	        3
3번째 호출	  3	             3	           3	        [0, 1, 2, 3, 4]         6 
4번째 호출	  6	             4	           4        	[0, 1, 2, 3, 4]        10

//<초기값이 있는 경우>
[0, 1, 2, 3, 4].reduce(function(acc, cur,Index, arr) {
  return accumulator + currentValue;
}, 10);

        	accumulator	currentValue	currentIndex	     array	       반환값
1번째 호출	   10	            0	            0	      [0, 1, 2, 3, 4]	 10
2번째 호출	   10		        1	            1		  [0, 1, 2, 3, 4]	 11
3번째 호출	   11		        2	            2	      [0, 1, 2, 3, 4]	 13 
4번째 호출	   13		        3	            3	      [0, 1, 2, 3, 4]	 16
5번째 호출	   16		        4	            4		  [0, 1, 2, 3, 4]	 20

.

  • 예제1 - reduce를 활용하여 배열의 모든 요소 더하기 (기본값을 1로 준 경우)
let arr=[4,8,12];
arr.reduce((a , b)=>{return a+b}, 1);
//실행       1 , 4           5
			5 , 8           13
			13 ,12          25
  • 예제2 - reduce를 활용하여 배열 복사하기1
let arr = [4,8,12];
const result = arr.reduce((arr , num)=>[...arr,num],[])
//실행      []  , 4       [4]
           [4] , 8       [4,8]
           [4,8], 12     [4,8,12]

console.log(result); // [4,8,12]
// console.log(arr === result); // false
  • 예제3 - reduce를 활용하여 배열 복사하기2
let arr2 = [4, 8, 12];
const result2 = arr2.reduce((arr, num) => [...arr, num], []);
 console.log(result2); // 배열이 복사됨.

// console.log(arr2 === result2); // false
  • 예제4 - reduce를 활용하여 요소의 숫자를 카운트 하여 객체로 반환하기1
const arr4 = ['A', 'B', 'C', 'A', 'C', 'C'];

function test() {
  return arr4.reduce((acc, cur) => {
    acc[cur] ? (acc[cur] += 1) : (acc[cur] = 1);
    return acc;
  }, {});
}
 console.log(test());// {'A':2,'B':1,'C':3}
  • 예제5 - reduce를 활용하여 요소의 숫자를 카운트 하여 객체로 반환하기2
const nums = [2, 2, 1, 1, 1, 2, 2];

  const obj = nums.reduce(
    (acc, cur) => ({ ...acc, [cur]: acc[cur] ? acc[cur] + 1 : 1 }),
    {},
  ); 

console.log(obj); // {1: 3, 2: 4}

0개의 댓글