알고리즘 CODEKATA 32 (내적)

오리너구리·2024년 6월 8일
0

CODEKATA

목록 보기
31/57
post-thumbnail

문제 설명

길이가 같은 두 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 이하입니다.

내 풀이

최종 코드

class Solution {
    fun solution(a: IntArray, b: IntArray): Int {
        var answer: Int = 0
        var count = a.count().toInt()

        for (i in 1 .. count) {
            answer += a[i-1] * b[i-1]
        }

        return answer
    }
}

a 랑 b의 개수가 똑같으니깐 그냥 a의 개수만 count 변수에 넣어놓고

for문으로 a[인덱스] * b[인덱스] 해준값을 answer에 더 해줬음


다른 사람 풀이

class Solution {
    fun solution(a: IntArray, b: IntArray): Int {
        var answer = 0
        for (i in a.indices)
            answer += (a[i] * b[i])
        return answer
    }
}

근데 생각해보니까 굳이 count() 안쓰고 indices 를 쓰면 더 간단했다.

좀 더 생각하고 풀걸

class Solution {
    fun solution(a: IntArray, b: IntArray): Int {
        return a.zip(b).map { it.first * it.second }.sum()
    }
}

zip 이라는 애를 써서 풀수도있었다.

zip 함수 개념은 이렇다.

  • 두 개의 배열을 묶어서 Pair 타입의 배열을 반환하는 기능을 가지고 있다.
  • 같은 인덱스를 참조할 때 유용하게 사용할 수 있으며, 배열이나 리스트 모두 사용 가능하다.
  • 두 리스트의 타입이 다르더라도 상관 없이 Pair로 묶일 수 있다.
  • 두 리스트의 길이가 다를 경우, 더 짧은 리스트의 길이에 맞춰서 묶인다.

배열.zip(묶을 배열).map{ it.first(첫번째 배열의 요소) * it.second(두번째 배열의 요소)}.sum()

이렇게 사용하는 건가봄!

아직 공부할게 산더미로군~~

profile
오리너구리입니다

0개의 댓글