https://school.programmers.co.kr/learn/courses/30/lessons/70128
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
📌 문제 설명
길이가 같은 두 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 입니다.
🗒 풀이
def solution(a, b):
answer = 0
for i in range(len(a)):
answer += a[i] * b[i]
return answer
누적합을 저장하기 위한 answer 변수를 생성한다.
a, b의 길이는 동일하다고 문제 조건에 설명되어있으므로, a의 길이 만큼 for문을 탐색한다.
answer에 a와 b의 각 원소를 곱한 값을 누적시켜 저장한다.
🤔 후기
내적을 잘 몰라도 문제 조건만 잘 보면 쉽게 풀 수 있는 문제였다.
풀고나서 다른 사람들의 후기를 봤는데, zip() 함수를 사용하면 한줄로 풀 수 있는 문제였다.
zip() 함수는 여러 그룹의 데이터를 루프를 한번만 돌아도 처리할 수 있는게 장점이다.
a = [1, 2, 3, 4]
b = [-3, -1, 0, 2]
for x, y in zip(a, b):
print(x, y)
# print 결과
# 1 -3
# 2 -1
# 3 0
# 4 2
zip() 함수가 익숙하지 않다면 위의 코드 결과를 참고하면 좀 더 이해가 쉬울 것이다.
때문에 zip() 함수를 사용해서 다시 문제를 풀어본다면, 다음과 같이 처리 가능하다.
def solution(a, b):
return sum([x*y for x, y in zip(a,b)])
'알고리즘' 카테고리의 다른 글
[프로그래머스] 없는 숫자 더하기(python) (0) | 2022.08.20 |
---|---|
[프로그래머스] 음양 더하기(python) (0) | 2022.08.14 |
[프로그래머스] 크레인 인형 뽑기(python) (0) | 2022.08.06 |
[프로그래머스] 키패드 누르기(python) (0) | 2022.08.06 |
[프로그래머스] 숫자 문자열과 영단어 (python) (0) | 2022.08.04 |