본문 바로가기
Algorithm

[프로그래머스] 내적 - JavaScript 📝

by Baest 2021. 11. 9.

[링크]

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

 

 

 

[문제설명 및 입출력 예]

내적 | 內積 | inner product

적은 '쌓는다'는 뜻의 한자이고, 여기서는 '곱한다'는 뜻이다. 벡터의 곱하기는 두 가지 정의가 있는데, 내적은 벡터를 마치 수처럼 곱하는 개념이다.
벡터에는 방향이 있으므로, 방향이 일치하는 만큼만 곱한다. 예를 들어 두 벡터의 방향이 같으면, 두 벡터의 크기를 그냥 곱한다. 두 벡터가 이루는 각이 90도일 땐, 일치하는 정도가 전혀 없기 때문에 내적의 값은 0이다. 내적은 한 벡터를 다른 벡터로 정사영 시켜서, 그 벡터의 크기를 곱한다.

*출처: https://wikidocs.net/22384

 

042. 내적 vs 외적

# 내적 | 內積 | inner product **적**은 '쌓는다'는 뜻의 한자이고, 여기서는 '곱한다'는 뜻이다. 벡터의 곱하기는 두 가지 정의가 있는데, 내적은 벡터를 ...

wikidocs.net

 

👉 내적이 뭔지는 몰랐으나 입출력 예를 보고, a와 b 배열의 같은 위치에 있는 값들을 곱하고 모든 값을 더하라는 뜻으로 생각했다.

 

 

 

[내가 제출한 코드 및 풀이]

📝풀이과정

더보기
  1. a와 b 배열의 길이만큼 반복문을 돌려야하는데, 길이(length)는 같으니까 그 중 a.length만큼 for문 돌림
  2. 반복문이 돌면서 a[i]값과 b[i]값을 곱하고, 연산 결과를 sum에 담는다.

 

 

[다른 사람의 코드]

1
2
3
4
5
6
7
function solution(a, b) {
    let result = 0;
    for (let i in a) {
        result += a[i] * b[i]
    }
    return result
}
cs
  • 내 코드와 다른점은 3번 라인에서 for / in문을 사용해서 표현

 

1
2
3
4
function solution(a, b) {
    var answer = a.reduce((acc, cur, idx) => acc += cur*b[idx], 0)
    return answer;
}
 
cs
  • reduce 메서드를 사용해서 작성
reduce 함수는 네 개의 인자를 가진다.
1. 누산기(acc)
2. 현재 값(cur)
3. 현재 인덱스(idx)
4. 원본 배열(src)

👉 리듀서 함수의 반환 값은 누산기에 할당되고, 누산기는 순회 중 유지되므로 결국 최종 결과는 하나의 값이 된다.

*출처: https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

 

Array.prototype.reduce() - JavaScript | MDN

reduce() 메서드는 배열의 각 요소에 대해 주어진 리듀서(reducer) 함수를 실행하고, 하나의 결과값을 반환합니다.

developer.mozilla.org

 

-> 이전에 Spring 프로젝트에서 장바구니 계산 기능을 Script 로 mapreduce(?) 를 써서 작성했었는데, 그 당시 찾아봤더니 누산기 기능이 있다고 했다. 그때는 해당 코드를 지우고 다른 코드로 리팩토링 했지만, 그런 느낌인듯✨