포스트

172. 평균 구하기

나의 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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를 통해서 코드를 아주 심플하게 작성한것을 보았다. 코드는 아래와 같다.

다른코드

1
2
3
4
func solution(_ arr:[Int]) -> Double {

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

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

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

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


  • 추가 다른걸 보던 중, for 문은 굳이 0 부터 안하고 배열 자체로 접근을 할 수 있다라고 정리를 했었는데, 해당 부분을 사용을 하질 못했다. 아니 생각을 하질 못했다. 다음번에 비슷한 문제가 나오면 일단은 for 문을 배열로 바로 접근하게 코드를 작성하고 그다음 또 비슷한 문제가 나왔을때 reduce로 해보던가 아니면 두개를 그냥 같이 작성을 해봐야겠다.

  • 24.2.2 추가

오늘 하샤드 수 문제를 풀다가 reduce개념이 안잡힌거 같아 그전에 고차함수를 써야했던 문제를 풀던중 해당 문제는 배열의 평균값 문제와 거의 똑같으므로 그 코드에서 정답에 맞춰 수정한다.

다른코드

1
2
3
4
5
6
7
8
9
10
11
12
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
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.