https://school.programmers.co.kr/learn/courses/30/lessons/120817
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
* 배열의 평균값 *
정수 배열 numbers가 매개변수로 주어지고,
numbers의 원소의 평균값을 return하도록 solution 함수를 완성하라!
지난 미션과 더불어 더욱 미션의 단계가 높아 지고 있죠~?
이번엔 따로 부연 설명없이 문제의 핵심을 바로 알아볼 수 있죠?
바로 "원소의 평균값을 구하는 문제" 에요!
자, 문제를 잘 읽어 봅시다~
정수 배열 numbers가 매개변수로 주어지고~
이번의 핵심은 배열임을 알 수가 있죠?
그리고
numbers의 원소의 평균값을 return하도록 solution 함수를 완성하라!
자 우리는 이 문제를 풀기 위해서는 기본적인 개념을 알고 있어야 해요!
이 문제에서는 배열의 합과 평균을 계산하는 방법을
알고 있어야 이러한 문제에 맞닥뜨릴때
문제를 쉽게 이해하고 해결 할 수 있어요!
자, 그렇다면 배열의 합 계산법을 먼저 알아봅시다!
배열의 합을 계산하는 방법엔 여러가지가 있는데
그 예제로 Swift의 'reduce'의 메서드를 사용하는 방법을 간단히 알아볼께요!
func calculateTotal() -> Int {
let numbers = [1, 2, 3, 4, 5]
let total = numbers.reduce(0, +)
return total
}
let result = calculateTotal() // 출력: 15
'reduce' 메서드는 배열의 각 요소를 순회하면서 지정된 시작 값에서 시작하여
클로저(+)를 사용하여 요소를 결합하여 단일 값을 생성하는 것을 알 수 있어요!
' 0 '은 초기값으로, 합계를 시작할 값이고
' + ' 는 클로저로, 각 요소를 합계에 추가하는 연산자이죠
위 예제에서 'reduce' 메서드는 배열의 모든 요소를 합하여 total에 할당 하는것을 말해요!
결과적으로 ' total '은 1부터 5까지의 합인 ' 15 '가 되는 것을 알 수 있어요!
' + ' 클로저에 대해 조금더 알아 볼까요?!
클로저는 Swift에서 기능을 하나로 묶은 코드 블록이에요!
다른 프로그래밍 언어에서는 익명 함수 or 람다 함수와 비슷한 개념입니다.
클로저(+)는 주변 환경에서 변수나 상수를 캡처하여 실행할 수 있는 독립적인 코드 블록으로서 사용돼요!
게다가
클로저(+) 는 배열의 각 요소를 합계에 추가하는 역할도 수행하며,
두 개의 인자를 받아들이고((Int, Int) -> Int), 그것들을 더한 값을 반환하는 역할을 하죠.
따라서
'reduce' 메서드에 전달되는 클로저(+)는 각 요소를 합계에 추가하는 역할을 하는 것입니다~
간단한 예제로 이해해볼까요?!
아래는 두 개의 숫자를 더하는 클로저(+)를 선언하는 Swift 코드에요!
let addClosure = { (a: Int, b: Int) -> Int in
return a + b
}
let result = addClosure(3, 4) // 결과: 7
여기서의 addClosure는 두 개의 정수를 입력으로 받아들이고,
그것들을 더한 값을 반환하는게 클로저(+)에요~
이 클로저(+)를 호출하면 전달된 두 개의 인수를 더한 결과를 반환 하게 되죠!
따라서
배열의 합을 계산하는 'reduce' 메서드에서 사용되는 클로저인 ' + ' 는
각 요소를 합계에 추가하는 역할을 하며, 배열의 모든 요소를 더하여
단일 값을 생성하는것을 이야기 해요!
이제 이해 되었을까요?!
위 코드에서 말하는 " int in "은 클로저(+)의 매개 변수와 실행 코드를 구분하는 역할을 해요!
Swift의 클로저(+)는 일반적으로 다음과 같은 구조를 가지게 되는데
{ (매개변수) -> 반환타입 in
실행코드
}
여기서 "(매개변수) -> 반환타입" 은 클로저(+)의 시그니처(signature)를 나타내며,
클로저(+)가 받아들이는 매개변수의 타입과 반환하는 값의 타입을 정의해요!
in 키워드는 매개변수와 실행 코드를 구분해요!
따라서
주어진 클로저(+)에서의 " int in "은 클로저(+)의 매개변수를 나타내며,
클로저(+)가 무엇을 받아들이고 무엇을 반환하는지를 정의해요!
위위 코드에서는 addClosure라는 클로저(+)를 정의하고,
정수형 매개변수 a와 b를 받아들이고 두 수를 더한 값을 반환하는 것이죠~
자 그렇다면 이번엔
평균값을 계산 하는 방법을 알아 볼께요!
평균값을 계산하는 방법은 비교적 간단해요!
먼저 배열의 합을 계산한 다음, 배열의 길이로 나누면 되는 간단한 방법이죠~
func calculateAverage() -> Double {
let numbers = [1, 2, 3, 4, 5]
let total = numbers.reduce(0, +)
let average = Double(total) / Double(numbers.count)
return average
}
let result = calculateAverage() // 결과: 3.0
" total "은 배열의 모든 요소의 합이며, 이전 예제에서 사용한 것과 같아요!
" numbers.count "는 배열의 요소 수, 즉 배열의 길이를 나타내요~
"Double(total)과 Double(numbers.count)"를 사용하여
정수 값을 Double 값으로 변환하는데
이는 정확한 평균 값을 얻기 위해 필요로 해요!
마지막으로,
배열의 합을 배열의 길이로 나누어 평균값을 계산해요!
위 예제에서 "average"는 1부터 5까지의 평균값으로 3.0이 되죠!
이제 각각의 단계를 이해했을 때,
배열의 합과 평균값을 계산하는 데 사용되는 방법을 이해했을 거에요~!
자 이제 본론으로 넘어와 볼까요?!
다시한번 문제를 잘 살펴 봅시다!
정수 배열 numbers가 매개변수로 주어지고,
numbers의 원소의 평균값을 return하도록 solution 함수를 완성하라!
배열의 합과 평균값에 대해 알게 되었다면, 이 문제의 해결 방식도 쉽게 보이죠?!
따라서 이 문제의 답은 아래 코드와 같이 진행됩니다!
import Foundation
func solution(_ numbers: [Int]) -> Double {
// 정수 배열의 합을 계산
let total = numbers.reduce(0, +)
// 평균값을 계산하고 반환
let average = Double(total) / Double(numbers.count)
return average
}
자~ 쉽게 하나하나 풀어 설명 해볼께요!
import Foundation
Foundation 프레임워크를 가져오는 문장이며,
Foundation 프레임워크는 Swift 언어의 기본 라이브러리이며,
여러 가지 유용한 클래스와 함수를 포함하고 있어요~
func solution(_ numbers: [Int]) -> Double {
solution 함수를 정의 하는데, 이 함수는 정수 배열을 받아서
평균값을 계산하고 더블 형태로 반환해요!
(_ numbers: [Int])는 함수의 매개변수로 정수 배열을 받아요!
이 매개변수의 이름은 numbers이며, 함수 내에서 사용되게 되죠~
' _ '는 외부에서 해당 매개변수를 호출할 때 이름을 생략할 수 있음을 나타내며,
" -> Double " 는 함수가 반환하는 값의 타입을 지정해요
이 함수는 평균값을 반환하며, 그 타입은 더블을 말하죠~!
// 정수 배열의 합을 계산
let total = numbers.reduce(0, +)
" reduce " 메서드를 사용하여 정수 배열의 합을 하는데, " reduce " 메서드는 배열의 각 요소를 조합하여
단일 값을 반환해요! 여기서는 초기값으로 0을 사용하고, 각 요소를 더하여 총 합계를 계산하게 되죠~!
// 평균값을 계산하고 반환
let average = Double(total) / Double(numbers.count)
return average
합계를 배열의 길이로 나누어 평균값을 계산해요! 여기서 " total "은 합계이며,
" numbers.count "는 배열의 길이, 즉 요소의 개수를 나타내죠~!
그리고
"return average"로 평균값을 반환해요.
이렇게 코드는 주어진 정수 배열의 평균값을 계산하여
Double 형태로 반환을 해요!
꼭 이런 배열의 방법 이외에도! 이전 아홉번째 미션까지의 내용을 토대로 반복문을 사용하여
배열의 합을 계산 하고 이를 배열의 길이로 나누어 아래 코드와 같이 평균 값을 계산 하는 방법도 있어요!
import Foundation
func solution(_ numbers:[Int]) -> Double {
var sum = 0
for n in numbers {
sum += n
}
return Double(sum)/Double(numbers.count)
}
그런데 위와 같은 방법은 reduce 메서드를 사용하는 방법과 비슷하게 작동하지만,
코드가 약간 더 명시적이고 직관적일 수 있는 점이 있죠.
'IOS > Swift-Algorithm (Programmers)' 카테고리의 다른 글
[Swift] Programmers - 평균 구하기 (0) | 2024.02.19 |
---|---|
[Swift] Programmers - 짝수와 홀수 (0) | 2024.02.19 |
[Swift] Programmers - 짝수의 합 (0) | 2024.02.19 |
[Swift] Programmers - 각도기 (0) | 2024.02.19 |
[Swift] Programmers - 두 수의 나눗셈 (0) | 2024.02.19 |