프로그래머스 “내적” 문제를 풀어보았습니다.
여기를 누르면 설명을 건너뛸 수 있습니다.
문제 설명
길이가 같은 두 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 이하입니다.
입출력 예
a | b | result |
---|---|---|
[1,2,3,4] | [-3,-1,0,2] | 3 |
[-1,0,1] | [1,0,-1] | -2 |
입출력 예 설명
입출력 예 #1
- a와 b의 내적은
1*(-3) + 2*(-1) + 3*0 + 4*2 = 3
입니다.
입출력 예 #2
- a와 b의 내적은
(-1)*1 + 0*0 + 1*(-1) = -2
입니다.
Solution
[문제 이해]
- a, b 2개 리스트의 요소를 동시에 꺼내서 계산을 진행하면 빠르게 끝낼 수 있다고 생각했습니다.
이해한 내용을 바탕으로 코드를 작성했습니다.
[코드]
def solution(a, b):
# zip() 함수를 통해 2개 리스트의 요소를 동시에 추출하여 계산
answer = sum([small_a * small_b for small_a, small_b in zip(a, b)])
return answer
[여담]
내적이라는 것이 무언인지 궁금해서 찾아봤습니다.
내적이란 스칼라 곱이라고도 하며, 여기서 스칼라는 크기만 있고 방향은 가지지 않는 양이다. 즉, 방향이 있는 두 개의 벡터 값의 스칼라를 계산하는 것을 뜻한다. 주로 두 벡터 간의 각도를 구하기 위해 사용된다.
두 벡터 a와 b의 스칼라 곱은
a·b=|a|·|b|cosθ
로 표현하며, 이것은 벡터a와 벡터b의 방향을 동일한 방향으로 변환하여 곱해 주는 것이다. 예를 들어 벡터 a와 벡터 b 사이의 θ값이 90˚일 경우 스칼라 곱은 0이 되고, 0인 경우 같은 방향이라는 의미로 최댓값이 나온다.※ 내적의 성질
- 교환법칙이 성립한다.
- 결합법칙이 성립한다.
- 배분법칙이 성립한다.
“사이언스올 - 내적”
복잡한 수학적 의미가 담긴 내용이었습니다.
내적에 대한 내용을 쉽게 정리하면 벡터와 벡터의 곱연산 -> 결과는 스칼라
입니다.
즉, a * b의 의미로 볼 수 있었다. (많은 내용이 함축되고 생략됨)
📌 보통은 “벡터+벡터=벡터”, “스칼라+스칼라=스칼라” 라고 합니다.