Algorithm

Swift) 프로그래머스: 평균 구하기

hoonsbrand 2022. 7. 15.

 

개인 공부를 토대로  작성한 내용입니다.

잘못된 내용 전달이 있을 수 있습니다!

피드백 주시면 감사히 받겠습니다:)


 

 

 

 

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

댓글