포스트

106. 연속된 수의 합


1
2
3
4
5
6
7
8
9
10
11
12
13
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 해준값으로 범위를 정해주어 해결하였다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.