알고리즘🅰/프로그래머스

[프로그래머스] 내적

개발조각 2022. 2. 8. 18:22
728x90
반응형

2021.09.24에 푼 문제입니다.

 

"내적" 문제 해결방안에 대해 설명하겠습니다.

이번 문제는 쉬운 편에 속해서 빠르게 풀었습니다.

 


해결방안

function solution(a, b) {    
    return a.reduce((acc, cur, idx) => acc += a[idx] * b[idx], 0);
}

 

a.reduce((acc, cur, idx) => acc += a[idx] * b[idx], 0);

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

reduce() 함수는 네 개의 인자를 가집니다.
1. 누산기 (acc)
2. 현재 값 (cur)
3. 현재 인덱스 (idx)
4. 원본 배열 (src)

구문 : 배열.reduce((callback)=>처리할 현재 요소, 기본값)

  • callback : 배열의 각 요소에 대해 실행할 함수. 다음 네 가지 인수(acc, cur, idx, src)를 받습니다.
  • 기본값 : 넣어도 되고 안 넣어도 됨

 

여기서 꼭 기본값 0을 넣어주어야 합니다.

기본값 0을 안 넣어주면 테스트1에서 답이 아닌 다른 값이 나옵니다.

 

기본값 0을 안 넣어주면 처음acc값이 a배열의 첫 번째 원소로 시작하게 됩니다.
자세한 설명은 테스트1,2에서 설명하겠습니다.

 

테스트 1

  1. a[1], b[-3]
    • 기본값 없을 경우 : 1
      • a[0]*b[0]이 실행되지 않고 a배열의 첫 번째 원소인 1이 됩니다.
      • 두 가지 배열을 쓰지 않을 경우는 상관없지만 쓸 경우에는 기본값을 써주는 게 좋을 것 같습니다.
    • 기본값 0일 경우 : a[0]*b[0] = 1*(-3) = -3
  2. a[1, 2], b[-3, -1]
    • 기본값 없을 경우 : 1 + a[1]*b[1] = 1 + (2*(-1)) = 1 + (-2) = -1
      • index 1부터 시작
    • 기본값 0일 경우 : -3 + a[1]*b[1] = -3 + (2*(-1)) = -3 + (-2) = -5
  3. a[1, 2, 3], b[-3, -1, 0]
    • 기본값 없을 경우 : -1 + a[2]*b[2] = -1 + (3*0) = -1 + 0 = -1
    • 기본값 0일 경우 : -5 + a[2]*b[2] = -3 + (3*0) = -5 + 0 = -5
  4. a[1, 2, 3, 4], b[-3, -1, 0, 2]
    • 기본값 없을 경우 : -1 + a[3]*b[3] = -1 + (4* 2) = -1+8 = 7
    • 기본값 0일 경우 : -5 + a[3]*b[3] = -3 + (4* 2) = -5 + 8 = 3

기본값 0이 있을 때와 없을 때의 값이 다른 값이 나옵니다.

 

테스트 2

  1. a[-1], b[1]
    • 기본값 없을 경우 : -1
      • a[0]*b[0]이 실행되지 않고 a배열의 첫 번째 원소인 -1이 됩니다.
    • 기본값 0일 경우 : a[-1]*b[1] = (-1) * 1 = -1
  2. a[-1, 0], b[1, 0]
    • 기본값 없을 경우 : -1 + a[1]*b[1] = -1 + (0 * 0) = -1 + 0 = -1
      • index 1부터 시작
    • 기본값 0일 경우 : -1 + a[1]*b[1] = -1 + (0 * 0) = -1 + 0 = -1
  3. a[-1, 0, 1], b[1, 0, -1]
    • 기본값 없을 경우 : -1 + a[2]*b[2] = -1 + (1 * (-1)) = -1 + -1 = -2
    • 기본값 0일 경우 : -1 + a[2]*b[2] = -1 + (1 * (-1)) = -1 + -1 = -2

여기까지 프로그래머스 내적 해결방안에 대해 설명해보았습니다.

728x90
반응형