js 프로그래머스 내적

이명진·2022년 9월 14일
0

코드카타

목록 보기
38/69

문제 요약

길이가 같은 두 1차원 정수 배열 a,b가 매개변수로 주어진다. 내적을 구하면 되는데
내적은 각 배열을 돌면서 배열의 인덱스 값을 곱한것을 더한 값이다.

a[0]b[0]+a[n-1]b[n-1]

누적값을 구하는것이기 때문에 reduce함수를 적용해보려고 하였다.

내가 푼 풀이

function solution(a, b) {
    let answer = 0;
  	answer = a.reduce((acc,cur,i)=>{
      if(!a[i+1]){
       	return acc 
      }
      return acc + (a[i+1]*b[i+1])
    },a[0]*b[0])
    return answer;
}

다른사람들의 풀이를 봤을때 reduce를 그냥 머리로는 이해했는데
직접 사용해보려고 하니 잘모르겠어서 mdn을 쭉 훑어보면서 풀었다.
인덱스 값과 초기값을 두었고 순회를 한번 더 돌아서 undefind 값이 떠서 
값이 제대로 안나오자 a[i+1] 값이 undefind 이면 리턴 하도록 하였다.
제출 해보니 결과는 시간도 준수했고 올클리어 할수 있었다.
좀더 코드를 줄일수 있을것 같기도 한데 생각좀 해봐야 할것 같다.

다른사람의 풀이

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

초기값을 0으로 두고 간단하게 풀었다,
a.reduce를 써서 a.값을 인자로 계속 전달해주는줄 알았던 내 실수였다.
그냥 acc 값에 내가 정해준 a[i]*b[i] 값을 계속 곱해주는데
처음봤을때는 내 코드랑 뭐가 다른지 찾기 어려웠는데 좀더 생각해보니
이해할수 있었다.
매개변수로 cur을 주길래 꼭 사용해야 하나 싶었는데 아니었다.
고정관념에 너무 사로잡혀 있는것 같다.

acc += cur*b[idx]

이렇게 사용해도 될것 같다.

Acc 는 누적값,
cur는 a에서 배열을 순회하는 값

profile
프론트엔드 개발자 초보에서 고수까지!

0개의 댓글