포스트

25. 이어 붙인 수

나의 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import Foundation

func solution(_ num_list:[Int]) -> Int {
    
    var answer : Int = 0
    var sum1 : String = ""
    var sum2 : String = ""
    
    var even = num_list.filter{$0 % 2 == 0}
    var odd = num_list.filter{$0 % 2 != 0}
    
    for i in 0 ... even.count-1 {
        sum1 += String(even[i])
    }
    
    for i in 0 ... odd.count-1 {
        sum2 += String(odd[i])
    }
    
    answer = Int(sum1)! + Int(sum2)!
    
    return answer
}

이렇게 생각한 이유.

홀수를 나타내는 odd, 짝수를 나타내는 even이라는 배열을 만들어서 고차함수인 filter를 사용해 num_list안에 있는 value값이 짝수, 홀수인지를 구분하여 각각 담기게 하였다.

그다음으로 생각을 했떤부분이 이것을 문자열로 변환하여 하나로 붙이는것인데. 현재 나의 지식으로는 for문을 통해 각각의 value를 String으로 더하여 합쳤다.

그리고나서 다시 Int형변환을 하여 해결하였다.

이때 옵셔널 컴파일 에러가 떠서 unwrapping해주어 답을 도출하였다.

다른 코드를 보니 joined라는 메서드를 이용하여 간단하게 구했다.

1
2
3
4
5
6
7
8
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
}


배열에서 문자열로 하나로 만들때 joined를 사용한다.

joined(separator:) 사용

1
2
3
4
let arr = ["A", "B", "C", "D"]
let result = arr.joined(separator: " ")

print(result) // "A B C D"

가독성 면에서도 좋고, separator를 직접 지정할 수 있다. 또한, 문자열 끝에 원치 않는 whitespace가 생기는 것도 방지할 수 있다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.