12. 평균 구하기

Harold's velog·2024년 1월 25일

CodingTest (Class)

목록 보기
12/52

나의 코드

func solution(_ arr:[Int]) -> Double {
    
    var sum = 0
    
    var answer : Double = 0.0
    
    if arr.count >= 1 && arr.count <= 100 {
        if arr[0] >= -10000 && arr[arr.count-1] <= 10000 {
            
            for i in 0 ..< arr.count {
                
                sum += arr[i]
                
            }
            
        }
           
    } else {
      
        answer = 0
    } 
    
    answer = Double(sum) / Double(arr.count)
    
    
    return answer
}

이렇게 작성한 이유.
최근에도 비슷한 문제가 있었는데 그때는 in 0 ... arr.count-1 로 했었던 걸로 기억한다.
그래서 이번에는 ... 이 아닌 ..< 을 사용을 해보았다.

후기.

제출 후 다른 사람들은 어떻게 작성을 했을까 보던 중
reduce를 통해서 코드를 아주 심플하게 작성한것을 보았다.
코드는 아래와 같다.

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

    return Double(arr.reduce(0,+))/Double(arr.count)
}

뭔가 코드를 보고 공부를 하지않은 상태에서 추론을 해본다면 reduce문이 처음인자부터 시작해서 누적으로 더한다는것을 의미하는 것 같다.

즉 for문을 심플하게 사용하는것일까. reduce문을 공부를 해봐야겠다는 생각이 들었다.

조만간 여기에도 정리를 해봐야겠다.


  • 추가
    다른걸 보던 중, for 문은 굳이 0 부터 안하고 배열 자체로 접근을 할 수 있다라고 정리를 했었는데, 해당 부분을 사용을 하질 못했다. 아니 생각을 하질 못했다. 다음번에 비슷한 문제가 나오면 일단은 for 문을 배열로 바로 접근하게 코드를 작성하고 그다음 또 비슷한 문제가 나왔을때 reduce로 해보던가 아니면 두개를 그냥 같이 작성을 해봐야겠다.
  • 24.2.2 추가
    오늘 하샤드 수 문제를 풀다가 reduce개념이 안잡힌거 같아 그전에 고차함수를 써야했던 문제를 풀던중
    해당 문제는 배열의 평균값 문제와 거의 똑같으므로 그 코드에서 정답에 맞춰 수정한다.
import Foundation

func solution(_ arr:[Int]) -> Double {
    
    var sum : Double = 0.0
    
    var answer : Double = 0.0

        answer = Double(arr.reduce(0){$0 + $1}) / Double(arr.count)
    
    return answer
}
profile
데일리 정리, 하루에 최소 하나의 글은 적도록 하자.

0개의 댓글