[Swift] 배열 요소의 합 (feat. 자릿수 더하기)

Logan·2020년 10월 20일
1
post-thumbnail

자릿수 더하기


문제 설명
자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.


방법 1

func solution(_ n:Int) -> Int {

    let array = String(n).map { Int(String($0))! }
    var total = 0
    
    for i in array {
        total += i
    }
    
    return total
    
}

자연수 N을 배열로 바꿔야 반복문으로 나열할 수 있습니다.
[123]이 아니라 [1,2,3] 형태가 되어야 하기 때문에 우선 문자열 배열로 바꿔준 다음, 다시 .map method를 사용해서 정수 배열로 바꿔줬습니다.

let array = String(n).map { Int(String($0))! }

// 자연수 n을 정수 배열로 바꾸는 부분

복잡해 보이지만, 문자열 요소의 타입은 Character형식입니다.
요소를 String형식으로 바꿔준 다음, 다시 정수형으로 바꿔준 코드입니다.

자연수 N을 [1,2,3]과 같은 정수형 배열 형태로 바꿔줬고, for in 반복문으로 나열하면서 total 변수에 순서대로 더해 최종 값을 얻었습니다.
반복문 링크


방법 2

.reduce method를 활용해도 문제를 해결 할 수 있습니다.

func solution(_ n:Int) -> Int {

    String(n).map { Int(String($0))! }.reduce(0) { $0 + $1 }
    
}

.reduce 메소드

숫자 배열에선 reduce method를 사용하면 배열요소의 합 또는 곱한 결과를 알아낼 수 있습니다.

func reduce<Result>(_ initialResult: Result, _ nextPartialResult: (Result, Element) throws -> Result) rethrows -> Result

initialResult로 전달된 값은 클로저가 처음 실행될 때 nextPartialResult로 전달됩니다. 그리고 nextPartialResult값과 결합되어서 최종값이 리턴됩니다.

nextPartialResult에 전달된 값은, initialResult와 함께 계산되서 최종값을 리턴해줍니다.

var numbers = [1,2,3]
numbers.reduce(0) { (a: Int, b: Int) -> Int in
    return a + b
}

// returns : 10
// initialResult에 0을 전달하고, 배열의 합을 리턴

initialResult로 전달된 값은 nextPartialResult값과 함께 계산이 되기 때문에, 배열의 모든 요소를 곱한 결과가 필요한 경우, initialResult에 1을 전달해주면 됩니다.

var numbers = [1,2,3,4]
numbers.reduce(1) { (a: Int, b: Int) -> Int in
    return a * b
}

// returns : 24
profile
iOS개발자 꿈나무

0개의 댓글