2일차 → 내적(forEach(), reduce())
본문 바로가기
항해 중/2주차 알고리즘(프로그래머스)

2일차 → 내적(forEach(), reduce())

by 은돌1113 2021. 11. 9.

문제 설명

길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어진다.

a와 b의 내적을 return 하는 함수를 완성하세요

(내적이란 적을 쌓는다는 뜻의 한자이고, 곱하다는 뜻을 가지고 있다.)

 

이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이)

 

제한사항

- a, b의 길이는 1 이상 1,000 이하입니다.

- a, b의 모든 수는 1,000 이상 1,000 이하입니다.

 

내가 푼 문제 풀이

function solution(a, b) {

    let answer = 0

    for(let i = 0; i<a.length; i++){
      answer += a[i] * b[i]
    }
    // 두 1차원 배열의 길이는 같기 때문에 for문을 한번만 돌린다.

    return answer;
}

 

function solution(a, b) {

    let answer = 0

    a.forEach((item, i)=>{
      answer += item * b[i]
    })

    return answer;
}

1) a, b 배열이 길이가 같고 반환 값이 없기 때문에 forEach() 함수를 사용한다.

2) a 배열의 요소는 item에 들어 있기 때문에 item * b[i]를 연산해서 answer에 += 한다.

 

다른 사람이 푼 문제 풀이

function solution(a, b) {
    return a.reduce((total, val, index) => total + val * b[index], 0);
                                                              // 초깃값
                                  // 초깃값을 지정하지 않으면 배열의 첫번째 값이 초깃값으로 지정된다.
}

 

reduce()

내가 이해한 reduce() 함수는 배열을 돌면서 연산을 진행하고 최종적으로는 하나의 결과값을 반환하는 함수

 

reduce 함수는 네 개의 인자를 가진다.

1) 누산기

2) 현재 값

3) 현재 인덱스

4) 원본 배열

 

reduce의 반환 값은 누산기에 할당되고, 누산기는 순회 중 유지 되기 때문에 결국 최종 결과는 하나의 값이 된다.

즉, 배열.reduce((누적값, 현재값, 인덱스, 요소) => {return 결과}, 초깃값);의 형태가 된다.

(초깃값을 지정하지 않으면 배열의 첫번째 값이 초깃값으로 지정된다.)

 

https://ghost4551.tistory.com/48

 

[프로그래머스 JavaScript] 내적

프로그래머스 Level1 내적 문제 문제 풀이 : 따로 설명할 것도 없이 매우 간단한 문제이다. 흔히 알고있는 for문으로 해결했다가 다른 문제풀이를 보았는데 reduce 함수를 이용하여 푼 풀이를 보고

ghost4551.tistory.com

 

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

 

코딩테스트 연습 - 내적

길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요. 이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의

programmers.co.kr

 

댓글