2023년 1월 1일
08:00 AM
Buffering ...

최근 글 👑

[Swift] Programmers - 평균 구하기

2024. 2. 19. 20:18ㆍIOS/Swift-Algorithm (Programmers)
SMALL

https://school.programmers.co.kr/learn/courses/30/lessons/12944

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

* 평균 구하기 *

정수를 담고 있는 배열 arr의 평균값을 return하는 함수, solution을 완성해보세요.

* 제한사항 *

"arr"은 길이 1 이상, 100 이하인 배열

"arr"의 원소는 -10,000 이상 10,000 이하인 정수

자, 문제를 잘 살펴봅시다.

이번엔 평균을 구하는 알고리즘으로 구성되어있음을 알 수가 있네요.

우리가 평균을 구하는 알고리즘을 사용 하기 위해서는

어떻게 해야 할까요?!

지난 10번 미션 알고리즘에서 배열의 평균값을 구하는 방법 기억하시나요?!

이번 12번 알고리즘 미션도 그와 동일하게

배열의 평균값을 계산하는 일반적인 로직으로 구성하면 될 것 같아요.

 

func solution(_ arr:[Int]) -> Double {

 

첫번째 줄의 로직은 위 코드와 같이 진행됩니다.

 

solution 함수는 정수 배열을 입력으로 받아서 평균값을 반환하는 함수에요.

함수의 이름은 solution이고, 매개변수로는 이름이 arr이고

정수 배열 [Int] 타입인 배열이 전달되고 반환값은 Double 형식으로 반환됩니다~

우리가 이 평균구하기 알고리즘의 제한사항을 살펴보았을 때

"arr"은 길이 1 이상, 100 이하인 배열

"arr"의 원소는 -10,000 이상 10,000 이하인 정수

arr은 함수에 전달되는 매개변수로, 평균값을 구하고자 하는 정수 배열이 되며

이 배열에는 평균값을 계산할 요소들이 포함되어 있어야 해요.

그리고

"arr" 의 길이값이 많고, 원소의 값도 많다 보니

옵셔널 값을 강제로 언래핑할 필요성이 있다는 것 입니다.

우리가 옵셔널 값을 강제로 언래핑 하는 방법은 " ! "를 사용 하는 것인데요!

옵셔널 변수 뒤에 !를 붙이면 해당 변수가 실제로 값을 가지고 있다고 가정하고 그 값을 사용하게 되요.

이것은 해당 변수가 nil이 아님을 확신할 때만 사용해야 한다는 것명심해야 해요!

여기서

우리는 평균을 구하기 위해서 배열이 비어있는지 확인을 하는 로직이 필요 해요!

.isEmpty 는 배열이 비어있는지를 확인하는 Swift의 속성(Property)이에요.

점(.)을 사용하여 해당 속성에 접근해줘요!

 

여기서 arr.isEmpty는 배열 arr이 비어있는지 여부를 확인해요.

.isEmpty를 사용하면 배열이 비어있는지 여부를 판단해서 true 또는 false 값을 반환해요

true는 배열이 비어있음을 나타내고, false는 배열에 요소가 하나 이상 있음을 나타내요.

이 값을 사용하여 조건문을 통해 배열이 비어있는지 여부를 확인할 수 있어요!

따라서

!arr.isEmpty를 사용해 배열 arr이 비어있지 않음을 강제로 확인하여,

해당 배열이 비어있지 않으면 true를 반환하는 불리언(Boolean) 값으로 변환하여 조건을 확인할 수 있죠.

그런데 이러한 배열여부 판단을 위해선 우리는 guard 구문을 사용해 볼까 해요!

사실 if 조건문으로도 진행하는데 무리는 없지만,

새로운 구문을 사용해보는것도 좋을 것 같더라구요!?

로직으로는 아래와 같아요!

guard !arr.isEmpty else {
        return 0
    }

 

guard 구문을 사용하여 배열이 비어 있는지 확인하고 만약 배열이 비어 있다면,

즉 요소가 없는 경우에는 평균값을 계산할 수 없으므로 0을 바로 반환시켜줍시다!

!arr.isEmpty는 배열이 비어 있지 않음을 확인하는 코드에요!

   let sum = arr.reduce(0, +)

 

reduce 메서드를 사용하여 배열의 모든 요소를 합산해요.

이 때 초기값으로 0을 사용하고, 클로저 연산자 +를 사용하여 배열의 각 요소를 합산해줘요!

reduce 메서드는 배열의 요소를 순회하며

제공된 클로저에 따라 값을 결합하여 최종 결과를 반환합니다.

    return Double(sum) / Double(arr.count)
}

 

배열의 모든 요소를 합산한 후, 그 합을 배열의 요소 수로 나누어 평균값을 계산해요!

평균값을 구하기 위해 정수형의 sum을 Double로 형변환하여

정확한 나눗셈을 수행해서 평균값을 반환할 수 있어요.

전반적인 로직은 아래와 같이 진행 되요!

func solution(_ arr: [Int]) -> Double {
    guard !arr.isEmpty else {
        return 0
    }
    
    let sum = arr.reduce(0, +)
    return Double(sum) / Double(arr.count)
}

 

이러한 로직을 따르면 배열의 평균값을 간결하고

훨씬 명확하게 계산할 수 있는 장점이 있죠~!

아래 코드와 같은 방식으로 진행하면 코드가 많이 효율적이며,

코드의 가독성이나 유지보수성 면에서도 좋은 선택이 될 수 있죠!?

func solution(_ arr:[Int]) -> Double {
    return Double(arr.reduce(0,+))/Double(arr.count)
}
func solution(_ arr: [Int]) -> Double {
    if arr.isEmpty {
        return 0
    }
    return Double(arr.reduce(0, +)) / Double(arr.count)
}
728x90