티스토리 뷰
프로그래머스 레벨1 문제, 내적 문제설명
프로그래머스 레벨1문제, 내적문제는 동등한 크기의 배열 두개(a, b)가 주어졌을때 a, b의 내적을 구하는 문제입니다. 배열 동일위치 값을 각각 곱한 후 이들의 합을 구하는 간단한 문제입니다. 문제 설명대로 풀면 됩니다.
입출력 예 1번만 보겠습니다. a, b가 주어졌을때 반환할 값은 1 * -3 + 2 * -1 + 3 * 0 + 4 * 2 => 3이 됩니다. 해당 문제는 다양한 방식으로 풀수 있겠습니다. 저는 reduce를 사용해서 3줄, 1줄 버전으로 문제를 풀어보겠습니다.
프로그래머스 레벨1, 내적 swift 문제풀이
reduce(into:) 함수로 내적 구하기
reduce를 사용해서 작성해본 코드입니다. a의 계수가능범위를 indices로 반환받고, 그 계수가능범위에 reduce를 접근하고 있습니다. 이를 통해 reduce 클로져에서 0 ..< a.count의 범위를 순회하게 됩니다. 순회를 하면서 각각의 인덱스에 맞는 연산을 3행에서 수행하게 됩니다. 누적합 결과는 result에 저장되게 되며 최종 결과, result(내적)를 반환하는 코드입니다.
위의 코드는 3줄로 풀었죠? 더 간단하게 1줄로 표현할 수도 있습니다. 바로 위 reduce 클로져 내부의 첫번째, 두번째 인자인 ressult, idx 인자를 $0, $1로 표현하면 됩니다.
위와 같이 (result, idx) in 을 사용하지 않고, $0, $1를 사용해서 더욱 간단하게 코드를 작성할 수 있습니다. 뭐가 더 좋은 방법일가요?? 코드 상황에 따라 달라질거라 생각합니다. 이와 같이 다양한 방법으로 표현할 수 있다는 점을 알아두면 좋을 것 같습니다.
앞서 말했듯이, reduce를 사용하는것이 정도는 아닙니다. 따로 변수를 두고, forEach나 for-in 루프 등으로 변수에 누적합을 저장하고 반환할수도 있겠죠. reduce를 다양한 형태로 사용해서 문제를 풀 수 있다는 점 알고 가시면 되겠습니다.
아래는 해당 코드의 제출 결과 및 전체 코드입니다. 질문 및 의견 환영합니다. 😁
내적 swift reduce(into:)풀이 전체코드
func solution(_ a: [Int], _ b: [Int]) -> Int {
return (a.indices).reduce(into: 0) { $0 += a[$1] * b[$1] }
}
'알고리즘 정보 > Swift 알고리즘' 카테고리의 다른 글
swift filter, min 함수 예제, 제일작은수 제거하기 풀이 (0) | 2021.02.17 |
---|---|
스위프트 reduce 기초예제, 프로그래머스 평균구하기 풀이 (0) | 2021.02.16 |
스위프트 DFS 백트래킹 예제, 백준 10974 모든순열 풀이 (0) | 2021.02.14 |
swift Set contains 예제, 백준 2941 크로아티아 알파벳 풀이 (0) | 2021.02.13 |
swift swapAt 배열 스왑 예제, 백준 2947 나무조각 풀이 (0) | 2021.02.12 |
- Total
- Today
- Yesterday
- 개발자문서
- ios
- 자연어처리
- 프로그래머스
- 알고리즘
- Protocol
- 김프매매
- 백준swift
- Swift 알고리즘
- swift 문자열
- uikit
- SwiftUI
- swift string
- 부스트코스
- 프로토콜
- CoreML
- publisher
- 알고리즘문제
- swift알고리즘
- Collection
- 컬렉션
- 프로그래머스swift
- swift문제
- 백준알고리즘
- swift 기초
- swift언어
- swift reduce
- swift
- 스위프트
- createML
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |