티스토리 뷰

728x90

 

https://school.programmers.co.kr/learn/courses/30/lessons/12932

 

문제 사진

 

내 풀이

1. 

func solution(_ n:Int64) -> [Int] {
    var arr = String(n).map { $0 }
    var resultStr: [String] = []
    var resultInt: [Int] = []
    for i in arr {
        resultStr.append(String(i))
    }
    for _ in resultStr {
        resultInt.append(Int(resultStr.popLast()!)!)
    }
    return resultInt
}

비효율적이라 생각한다. 빈배열과 for문을 두번 써야한다는점과 가독성 측면에서도 별로여서 아래처럼 리팩토링을 해봤다.

 

2. 리팩토링

func solution(_ n:Int64) -> [Int] {
    var result: [Int] = []  
    // 1
    String(n).reversed().map { result.append(Int(String($0))!) } 
    return result
}

solution(12345)

 

 

다른사람의 풀이

func solution(_ n:Int64) -> [Int] {
    let arr = String(n).compactMap { Int(String($0)) }
    return arr.reversed()
}

굳이 빈배열을 만들지 않아도 됐었던거 같다.

compactMap을 사용해서 옵셔널처리를 해준것과 

[Int] 형태의 배열을 먼저 만들고 나서 reversed()를 사용해 순서를 뒤집어주는 방식인데 

강제 언래핑 (!)을 사용했던 내 방식을 compactMap이 배울점이었던것 같다.

 

배운것

reversed()

collection 요소들을 역순으로 정렬해 반환합니다.

 

예제

let word = "Backwards"
for char in word.reversed() {
    print(char, terminator: "")
}
// Prints "sdrawkcaB"

 

728x90