[Python] 코드카타 문제 풀이

Dada·2024년 12월 26일

문제 ▶ 프로그래머스 링크
길이가 같은 두 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의 길이)

# 오답 코드
def solution(a,b):
	answer = 0
	for num_a in a:
		for num_b in b:
			answer += num_a * num_b 
	return answer
  • 오답: 이중 for문을 돌렸는데 정답이 이상하게 나왔다!
    → for문 2개를 하나씩 돌리면 결과값이 나오지 않을까? = 멍청한 생각이었음..
    → 아래 코드에서는 첫 번째 for문이 한 번 돌 때마다 두 번째 for문은 list의 원소를 다 출력해 버린다.
    → 즉, a[0]*b[0] + a[0]*b[1] + … + a[0]*b[-1] ⇒ 이딴 식으로 결과 값이 나오는 것!
  • 해결 방안 1: for i in range (0, len(list))로 숫자를 뽑아 인덱스 번호를 할당해서 계산하기
def solution(a, b):
    answer = 0
    for i in range(0,len(a)):
        answer += a[i] * b[i]
    return answer
  • 해결 방안 2: zip() 사용하기
    → 사실 이 방법을 몰라서 이중 for문을 돌리는 우매한 선택을 해버렸던 것..
def solution(a, b):
    answer = 0
    for n1, n2 in zip(a, b):
        answer += n1 * n2
    return answer

0개의 댓글