코딩테스트

Lv.0 swift 배열 만들기 5

알롱도담쓰 2024. 3. 25. 11:56

문제 설명

문자열 배열 intStrs와 정수 k, s, l가 주어집니다. intStrs의 원소는 숫자로 이루어져 있습니다.

배열 intStrs의 각 원소마다 s번 인덱스에서 시작하는 길이 l짜리 부분 문자열을 잘라내 정수로 변환합니다. 이때 변환한 정수값이 k보다 큰 값들을 담은 배열을 return 하는 solution 함수를 완성해 주세요.

제한 조건

제한사항
0 ≤ s < 100
1 ≤ l ≤ 8
10l - 1 ≤ k < 10l
1 ≤ intStrs의 길이 ≤ 10,000
s + l ≤ intStrs의 원소의 길이 ≤ 120

내 답안

func solution(_ intStrs:[String], _ k:Int, _ s:Int, _ l:Int) -> [Int] {
    var result = [Int]()
    
    for i in intStrs {
        let index = i.index(i.startIndex, offsetBy:s)
        let lIndex = i.index(index, offsetBy:l - 1)
        let str = i[index...lIndex]
        let number = Int(String(str))!
        if number > k {
            result.append(number)    
        }
    }
    
    return result
}

 

접근 방법

 

다른 풀이

func solution(_ intStrs:[String], _ k:Int, _ s:Int, _ l:Int) -> [Int] {
    return intStrs.map {
        let startIdx = $0.index($0.startIndex, offsetBy: s)
        let endIdx = $0.index(startIdx, offsetBy: l)
        return Int(String($0[startIdx..<endIdx]))!
    }.filter { $0 > k }
}

 

접근 방법은 나랑 비슷했는데 고차함수를 쓴 점이 나와 달랐다

 

func solution(_ intStrs: [String], _ k: Int, _ s: Int, _ l: Int) -> [Int] {
    return intStrs.map { Int($0.prefix(s + l).suffix(l))! }.filter { $0 > k }
}

 

 

알게 된 것

문자열 추출할 때 prefix와 suffix는 전혀 생각도 못 했다

인덱스를 구해서 부분을 추출해야지만 생각했는데..문자열의 부분을 구할 때 이 두 함수를 사용할 수 있겠구나