[Swift] - 연속된 자연수의 합

Shawn·2021년 4월 13일
0

SwiftAlgo

목록 보기
9/12

Swift로 연속된 자연수를 구하자


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 + 나눈 몫 까지의 연속된 자연수의 합으로 나타낼 수 있다는 것이다.

profile
iOS 개발, Flutter 개발, Swift, Dart, 42 Seoul 3기

0개의 댓글