[알고리즘] Swift 배열의 평균값

이유진·2024년 2월 29일
0

알고리즘

목록 보기
10/32

문제 설명

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.


제한사항

  • 0 ≤ numbers의 원소 ≤ 1,000
  • 1 ≤ numbers의 길이 ≤ 100
  • 정답의 소수 부분이 .0 또는 .5인 경우만 입력으로 주어집니다.

입출력 예

numbersresult
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]5.5
[89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]94.0

입출력 예 설명

입출력 예 #1

  • numbers의 원소들의 평균 값은 5.5입니다.

입출력 예 #2

  • numbers의 원소들의 평균 값은 94.0입니다.

풀이 과정

어제 풀었던 짝수의 배열 문제와 비슷해서 어렵지 않게 해결!
배열 내 정수의 개수를 구할 수 있는 count 개념을 새로 알게 되었다.

“평균값 = 모든 수를 더한 총합을 총 개수로 나눈 값” 이므로
1. for ~ in 구문 사용해 원소의 합을 구하고,
2. count를 사용해 배열의 길이(배열 내 원소의 개수)를 구해 1을 2로 나눠주었다.

import Foundation

func solution(_ numbers:[Int]) -> Double {
    var sum = 0
    
    for i in numbers {
        sum += i
    }
    return sum / numbers.count
    //error: Cannot convert return expression of type 'Int' to return type 'Double'
}

Error1
Cannot convert return expression of type 'Int' to return type 'Double'

스코프 & 자료형을 확인하지 않아 생긴 오류.
어제 공부한 부분인데 홀랑 까먹고 신경을 못썼다. 하핫.

원소의 평균값이 실수로 나타나므로
반환할 때 sum(정수의 합)과 numbers.count(배열의 길이, 즉 배열 내 정수의 개수)를
Double(실수값 저장 자료형)로 묶어줘야 한다.

import Foundation

func solution(_ numbers:[Int]) -> Double {
    var sum = 0
    
    for i in numbers {
        sum += i
    }
    return Double(sum / numbers.count)
    //error: Cannot convert return expression of type 'Double' to return type 'Int'
}

Error2
그래서 이렇게 묶어줬는데 왜 에러가 났느냐..!!
(아직 정확한 이유를 찾지 못했다. 질문하러 가야겠다. 찾고 와서 내용 수정.)
Double을 sum과 numbers.count에 각각 묶어주었더니 오류를 해결할 수 있었다.

return Double(sum) / Double(number.count)

Solution

import Foundation

func solution(_ numbers:[Int]) -> Double {
    var sum = 0
    
    for i in numbers {
        sum += i
    }
    return Double(sum) / Double(numbers.count)
}

이렇게 최종 완성!
다른 풀이들도 찾아봤는데, 어제 짝수의 합 문제에서도 그렇고
filter, reduce 개념을 활용한 풀이가 많이 보이더라.
고차함수 개념인 것 같던데 아직 모르는 부분이라
이번주 중으로 공부해서 활용해봐야겠다 :>

0개의 댓글