1. 문제 설명
자연수 N 이 주어지면 , 연속된 자연수의 합이 N 이되는 모든 자연수들의 배열을 구하라.
2. 나의 풀이
import Foundation
func solution(_ n: Int) -> [[Int]] {
var ans = [[Int]]()
var cnt: Int = 1
var total: Int = 1
for i in 2...n {
if total < n {
cnt += 1
total += i
} else { break }
}
total = 1
for i in 2...cnt {
var ret = [Int]()
total += i
if (n-total)%i == 0{
for j in 1...i {
ret.append(j + (n-total)/i)
}
ans.append(ret)
}
}
return ans
}
3. 풀이 설명
풀이를 알고나면 구현하기는 어렵지 않은 문제였다.
15를 예로 들자..
15 에서 1 + 2 인 3을 빼보자 그럼 12가 된다. 12를 2로 나누자 6이 된다.
1과 2에 6을 더하면 7, 8 즉 7 + 8 로 나타낼 수 있다. 감이온다
N에서 1 + 2 + 3 + ... i 까지 의 합을 빼준 후 , 그 빼준 값이 i 로 나누어 떨어진다면, 이 N 이라는 자연수는 1+ 나눈 몫 부터, i + 나눈 몫 까지의 연속된 자연수의 합으로 나타낼 수 있다는 것이다.