106. 연속된 수의 합

 


import Foundation

func solution(_ num:Int, _ total:Int) -> [Int] {
    
    var arr : [Int] = []
    
    var start = (total/num)-(num/2)
    var end = (total/num)+(num/2)
    
    arr = num % 2 != 0 ? ((start)...end).map{$0} : ((start+1)...end).map{$0}
    
    return arr
}

우선 중간값을 이용해서 접근을 해보려고 하였다.

전체합을 가진 total과 개수를 가진 num이므로 1씩 올라가는것을 활용하여 total/num 이 중간 값을 의미한다.

그리고 중간값을 기준으로 num을 반으로 나눈값을 빼면 좌측, 더한값은 우측 범위이므로 start, end로 하여서 구했다.

다만 num이 홀수일때 이것은 유효하고, 짝수일때는 중간값이 애매해 진다.

/는 버림을 의미하기때문에 start+1 해준값으로 범위를 정해주어 해결하였다.