[TIL][프로그래머스/Swift] 내적

Eden·4일 전
2

TIL

목록 보기
38/41
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 이하입니다.

입출력 예

abresult
[1,2,3,4][-3,-1,0,2]3
[-1,0,1][1,0,-1]-2

오늘 풀었던 문제를 통해 두 배열의 내적을 구하는 방법에 대해 배우게 되었다. 두 배열 ab가 주어졌을 때, 같은 인덱스의 요소를 곱하고 그 결과를 모두 더해주는 내적 연산을 구현하는 방법을 익혔다.

최종 코드

func solution(_ a: [Int], _ b: [Int]) -> Int {
    var sum = 0
    for i in 0..<a.count {
        sum += a[i] * b[i]
    }
    return sum
}

문제를 이해하는게 제일 어려웠지 푸는 방법이 어려운 문제는 아니었다.
배열의 길이가 같다는 것을 이용하여 for문으로 각 요소에 접근해 곱셈을 한 후, 누적하여 더하는 방식으로 내적을 구할 수 있었다.

다른 코드

zip과 고차 함수 사용

func solution(_ a: [Int], _ b: [Int]) -> Int {
    return zip(a, b).map(*).reduce(0, +)
}
  • Swift의 zip() 함수를 사용하여 두 배열의 요소를 묶고, map()reduce()를 사용해 간결하게 내적을 구할 수도 있다.
  • zip(a, b)는 배열 ab의 각 요소를 튜플로 묶어준다. 이후 map(*)을 사용해 튜플의 요소들을 곱하고, reduce(0, +)를 사용해 모든 곱의 결과를 더해주는 방식으로도 풀 수 있다는 것을 알게 되었다.

느낀 점

  • 반복문을 사용한 방법은 직관적이며 이해하기 쉽지만, 코드의 길이가 길어진다는 단점이 있다.
  • zip, map, reduce를 사용한 방법은 코드가 간결해지고 Swift의 함수형 프로그래밍 요소를 활용할 수 있어 효율적이다.
  • zip을 사용하여 두 배열의 요소를 묶어 작업하는 방식이 간단하면서도 강력하다는 점을 새롭게 배웠고, 이를 통해 Swift에서 함수형 프로그래밍의 유용성을 다시 한 번 느낄 수 있었다.
  • 그치만 복잡하다!
profile
Just living the daydream, one moment at a time.
post-custom-banner

0개의 댓글