728x90
프로그래머스에서 내적 알고리즘 문제를 풀어보았다.
먼저 내적에 대해서 알고 가고 싶어서 강의를 조금 들었다.
벡터의 정의 (벡터의 기초) https://youtu.be/g3n1VxiXgrE
백터의 내적 https://www.youtube.com/watch?v=IOf1o72aKDc
여기까지만 간단히 들어보고 이런 거구나 하고 문제 풀이를 시작했다.
사실 문제를 푸는데 있어서 내적에 대한 개념을 몰라도 문제 푸는데에는 상관이 없었다. 문제 설명에서 내적을 푸는식이 적혀있기 때문이다. 하지만 간단하게라도 개념을 알고 가고 싶었다.
문제 설명
길이가 같은 두 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의 길이)
제한사항
- a, b의 길이는 1 이상 1,000 이하입니다.
- a, b의 모든 수는 -1,000 이상 1,000 이하입니다.
입출력 예
입출력 예 설명
입출력 예 #1
- a와 b의 내적은 1*(-3) + 2*(-1) + 3*0 + 4*2 = 3 입니다.
입출력 예 #2
- a와 b의 내적은 (-1)*1 + 0*0 + 1*(-1) = -2 입니다.
문제 설명은 복잡해 보였지만 알고보면 곱한 뒤 더하면 되는 간단한 문제였다.
< 문제 풀이 코드 >
< 문제 리뷰 >
// 길이가 같은 두 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의 길이)
// 내적을 구하는 식을 살펴보면 결국 a엘리먼트와 b엘리먼트 곱해서 더하는 것이다.
// a, b는 이렇게 가정한다.
// a = [1,2,3,4];
// b = [-3,-1,0,2];
function solution(a, b) {
//답 저장할 변수 만들기
let answer = 0;
// a와 b 곱해서 저장하기
for (let i = 0; i < a.length; i ++){
//실행결과 예상하기
//첫번째 실행 : (answer = 0) + (a[0]*b[0] = -3)= (answer = -3)
//두번째 실행 : (answer = -3) + (a[1]*b[1] = -2) = (answer = -5)
//... 계속 실행하다보면 마지막 실행에서는 answer에 8이 찍힌다.
answer += a[i]*b[i];
}
//answer 구한 것을 solution 함수에 돌려주기.
return answer;
}
다른 방법으로 풀어보기 : reduce( ) 메소드 사용해보기
1. 차근 차근 여러 줄로 만들기
a = [1,2,3,4];
b = [-3,-1,0,2];
function solution(a, b) {
let answer = 0;
//reduce 메소드의 누적값 파라미터로 합을 구한다.
answer = a.reduce((acc, cur, i)=>{
//누적값 += 현재 a엘리먼트[i] * b엘리먼트[i]
acc += cur * b[i];
//누적값을 answer에 돌려준다.
return acc;
}, 0);
//answer을 solution에 돌려준다.
return answer;
}
solution(a, b);
2. 여러 줄로 만든 거 정리해서 한 줄 코드로 만들기
a = [1,2,3,4];
b = [-3,-1,0,2];
function solution(a, b) {
//a의 현재 엘리먼트[i] *b엘리먼트[i] 를 acc(누적값)에 넣어 계속 더해준다.
//최종적으로 더해진 누적값을 solution에 돌려준다.
return a.reduce((acc, cur, i)=> acc += cur * b[i], 0);
}
solution(a, b);
다른 사람들의 풀이
https://programmers.co.kr/learn/courses/30/lessons/70128/solution_groups?language=javascript
728x90
'Algorithm' 카테고리의 다른 글
[알고리즘] #19 수박수박수박수박수박수? | 프로그래머스 (0) | 2022.01.18 |
---|---|
[알고리즘] #16 문자열 내 p와 y의 개수 | 프로그래머스 (0) | 2022.01.17 |
[알고리즘] #11 x만큼 간격이 있는 n개의 숫자 | 프로그래머스 (0) | 2022.01.15 |
[알고리즘] #7 음양 더하기 | 프로그래머스 (0) | 2022.01.15 |
[알고리즘] #3 가운데 글자 가져오기 | 프로그래머스 (0) | 2022.01.14 |