자릿수 더하기
문제 설명
자연수 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