티스토리 뷰

코딩테스트

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는 전혀 생각도 못 했다

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

 

 

 

'코딩테스트' 카테고리의 다른 글

Lv.0 swift 문자열 겹쳐쓰기  (1) 2024.03.27
Lv.0 swift 분수의 덧셈  (0) 2024.03.27
Lv.0 swift 날짜 비교하기  (0) 2024.03.25
Lv.0 swift 세로 읽기  (0) 2024.03.24
Lv.0 swift 배열 만들기 3  (0) 2024.03.23
최근에 올라온 글