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 이하
* 알고리즘 분석과 이해 *
내적은 선형 대수학에서 두 벡터의 곱셈에 대한 개념이죠,
주어진 두 벡터를 곱한 후 그 결과를 모두 더하는 연산을 의미
간단하게 주어진 두 배열의 각 원소를 곱한 후 그 결과를 모두 + 하면 될 것 같습니다.
단, 배열의 길이가 최대 1,000이므로 매우 큰 입력에도 동작해야 해요.
* 로직구상 *
먼저, 배열의 길이가 같으므로 반복문(for-in)을 사용하여
같은 인덱스의 원소를 순회하면서 연산해주도록 하고,
내적의 핵심 내용으로 각 배열의 같은 인덱스에 있는
원소들을 곱하여 결과를 + 해주어야 하고,
주어진 배열의 최대 길이가 1,000이므로 선형 시간복잡도를 가진
알고리즘을 사용하는 방식으로 접근하면 좋을 것 같습니다.
* 코드구성 *
func solution(_ a: [Int], _ b: [Int]) -> Int {
먼저, 함수를 정의해줍시다.
두 개의 정수 배열을 받아서 내적을 계산하여 반환 하고 함수 이름은 "solution"이며,
입력으로 두 개의 정수 배열 "a"와 "b"를 받고,
반환 값으로는 정수형을 반환하도록 해줍시다.
var result = 0 // 내적을 저장할 변수
내적을 저장할 변수 "result"를 선언하고 0으로 초기화 시켜줍시다.
for i in 0..<a.count {
반복문을 통해 배열의 인덱스를 순회시켜줍시다.
0..<a.count는 배열 "a"의 인덱스 범위를 나타냅니다.
result += a[i] * b[i] // 각 배열의 같은 인덱스에 있는 원소를 곱하여 result에 더합니다.
}
return result // 최종적으로 계산된 내적을 반환합니다.
}
각 배열의 같은 인덱스에 있는 원소를 곱하여 "result"에 더합니다.
반복문이 끝나고 계산된 내적 "result"를 반환해 주도록 합니다.
* 전체 코드 구성 *
import Foundation
func solution(_ a: [Int], _ b: [Int]) -> Int {
var result = 0 // 내적을 저장할 변수
// 배열 a와 b의 길이가 같으므로 반복문은 한 번만 사용합니다.
for i in 0..<a.count {
result += a[i] * b[i] // 각 배열의 같은 인덱스에 있는 원소를 곱하여 result에 더합니다.
}
return result // 최종적으로 계산된 내적을 반환합니다.
}
'IOS > Swift-Algorithm (Programmers)' 카테고리의 다른 글
[Swift] Programmers - 문자열 내림차순으로 배치하기 (0) | 2024.03.15 |
---|---|
[Swift] Programmers - 약수의 개수와 덧셈 (0) | 2024.03.14 |
[Swift] Programmers - 수박수박수박수박수박수? (0) | 2024.03.12 |
[Swift] Programmers - 가운데 글자 가져오기 (0) | 2024.03.11 |
[Swift] Programmers - 제일 작은 수 제거하기 (0) | 2024.03.08 |