
import Foundation
func solution(_ num_list:[Int]) -> Int {
var oddArr = num_list.filter { $0 % 2 == 1 }
var evenArr = num_list.filter { $0 % 2 == 0 }
var sumOfOdd = 0
var sumOfEven = 0
var square = Double(oddArr.count - 1)
for n in oddArr {
sumOfOdd += Int(Double(n) * pow(Double(10), square))
square -= 1
}
square = Double(evenArr.count - 1)
for n in evenArr {
sumOfEven += Int(Double(n) * pow(Double(10), square))
square -= 1
}
return sumOfOdd + sumOfEven
}
filter를 사용해 홀수와 짝수를 별도의 배열로 분리
10의 제곱을 사용해 각 배열의 숫자들을 자릿수에 맞게 변환
pow() 함수의 각 파라미터와 반환 타입은 Double 혹은 Float만 가능하므로 형변환 진행
💡 각 배열 값(
n)에도 명시적 형변환이 필요한 이유?
Swift는 강한 타입(strongly typed) 언어로, 다른 타입 간의 자동 형변환을 허용하지 않는다.
import Foundation
func solution(_ num_list:[Int]) -> Int {
let even = Int(num_list.filter { $0 % 2 == 0 }.map { String($0) }.joined())!
let odd = Int(num_list.filter { $0 % 2 != 0 }.map { String($0) }.joined())!
return even + odd
}
.filter { $0 % 2 == 0 }: num_list에서 짝수만 필터링 → 배열 반환
.map { String($0) }: 각 숫자를 문자열로 변환 → 배열 반환
.joined(): 모든 문자열 이어붙이기.
joined(separator: String = "") 형식이지만 separator 생략 가능
Int(...)!에서 강제 언래핑:
형변환이 실패할 가능성이 있는 경우 Swift는 안전을 위해 옵셔널을 반환한다.
💡 옵셔널 언래핑 두 가지 방법.
!vs??
!: 강제 언래핑(Force Unwrapping)
값이 확실히 존재할 때만 사용한다.
옵셔널이 nil일 때 강제 언래핑하면 런타임 오류가 발생한다.
??: Nil 병합 연산자
안전하게 옵셔널을 처리할 수 있는 방법이다.
왼쪽 피연산자가nil이 아니면 그 값을 사용,nil이면 오른쪽 기본값을 사용한다.
→??언래핑이 안전하지만, 문제의 조건에 num_list 배열의 요소는 항상 정수이기에!언래핑을 사용했다.
filter 함수를 통해 홀수, 짝수 배열을 나누는 것까지는 생각했는데 Int 배열을 String으로 바꿔 문자열로 붙이는 생각을 못했다.
어쩐지 내 코드가 C언어스럽더라니... 다음엔 문자열로 변환 기억하기.