개인 공부를 토대로 작성한 내용입니다.
잘못된 내용 전달이 있을 수 있습니다!
피드백 주시면 감사히 받겠습니다:)
https://school.programmers.co.kr/learn/courses/30/lessons/12944
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
프로그래머스의 연습문제이다. 사실 매우 쉬운 문제이지만 고차 함수와 더 친해지기 위해서 요즘 쉬운 문제를 풀어보고 있다.
처음부터 고차함수를 쓰기에는 익숙지 않아서 나의 경우에는 먼저 일반적으로 내가 풀어온 방식(조건문이나 반복문 등)으로 풀고 그 후에 정답이면 그 코드를 고차 함수로 수정하였다 ㅎㅎ
for문 이용
func solution(_ arr:[Int]) -> Double {
var sum: Double = 0.0
for i in 0..<arr.count {
sum += Double(arr[i])
}
return sum / Double(arr.count)
}
reduce 이용
func solution(_ arr:[Int]) -> Double {
return Double(arr.reduce(0, +)) / Double(arr.count)
}
Reduce
주어진 클로저를 사용하여 시퀀스의 요소를 결합한 결과를 반환
선언
func reduce<Result>(
_ initialResult: Result,
_ nextPartialResult: (Result, Self.Element) throws -> Result
) rethrows -> Result
반환 값
최종 누적 값이다. 만약 시퀀스에 요소가 없다면 결과는 initialResult(초기값)다.
매개변수
- initialResult
- 초기 누적 값으로 사용할 값. 클로저가 처음 실행될 때 전달된다.
- nextPartialResult
- 누산 값(계속 덧붙여 합산한 값)과 시퀀스의 요소를 새 누산 값으로 결합하여 다음 클로저 호출에 사용하거나 호출자에게 반환하는 클로저
- 쉽게말해서 반복할 행동을 작성해 주면 된다.
func solution(_ arr:[Int]) -> Double {
return Double(arr.reduce(0, +)) / Double(arr.count)
}
축약을 하여서 작성을 했다.
하나씩 말로 풀어서 설명을 해보자면,
- arr배열을 이용한 reduce
- 초기값은 0이고 그 이후에 arr배열의 요소들을 하나씩 더한다 (+)
- 다 더해지면 합이 나올 텐데 이 합을 요소들의 개수(arr.count)만큼 나눈다. -> 평균 구하기
- 평균은 소수점이 나올 수 있으므로 Double로 캐스팅해준다.
연습문제들을 통해 고차 함수에 대해 공부를 하고 포스팅을 할 때 어느 정도의 정보까지 작성을 해야 하나 고민을 많이 해봤는데, 우선 해당 문제에서 사용한 기능 정도만 하는 게 좋을 것 같다고 생각해서 앞으로도 그렇게 할 예정이고 혹시라도 이건 문제에는 포함이 안됐지만 매우
중요한 내용이다 싶으면 따로 작성할 예정이다!
'Algorithm' 카테고리의 다른 글
Swift) 백준 2609번: 최대공약수와 최소공배수 (0) | 2022.05.26 |
---|---|
Swift) 백준 1929번: 소수 구하기 (0) | 2022.05.24 |
Swift) 1978번: 소수 찾기 (0) | 2022.05.21 |
Swift) 1037번: 약수 (0) | 2022.05.20 |
Swift) 9095번: 1, 2, 3 더하기 (0) | 2022.05.17 |
댓글