
import Foundation
func solution(_ intStrs:[String], _ k:Int, _ s:Int, _ l:Int) -> [Int] {
return intStrs.compactMap {
Int(String(Array($0)[s...s+l-1]))
}.filter { $0 > k }
}
String을 Array로 변환하면 각 요소는 Character 타입이 된다.
Character ↔️ Int 형변환은 불가
→ Character 요소를 String 타입으로 변환 후, Int로 변환
map을 사용하면 [Int?] 타입이 반환되기에 강제언래핑 대신 compactMap 사용
💡 map VS compactMap
map: 옵셔널 타입 결과를 그대로 유지
compactMap: nil 값은 제거하여 결과는 항상 non-optional 값
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(n) 함수:
"Hello".prefix(2)는 "He"를 반환한다.suffix(n) 함수:
"Hello".suffix(2)는 "lo"를 반환한다.$0.prefix(s + l): 문자열의 처음부터 s + l개의 문자를 가져온다.
→ 필요없는 뒷 문자열 버리기
.suffix(l): 그 결과에서 마지막 l개의 문자를 가져온다.
→ 필요없는 앞 문자열 버리기
결합하면, 인덱스 s부터 시작하여 길이 l만큼의 부분 문자열을 얻게 된다.
이전 포스팅에서 문자열 인덱스를 처리하려면 배열로 만든 후 배열의 인덱스를 사용하면 편하다고 작성했다.
오늘은 다른 사람의 코드를 보며 그 방법만 있는게 아니구나, prefix / suffix를 이용하면 번거로운 형변환 작업을 줄일 수 있구나 깨달았다.
까다로운 swift 문자열을 상대할 무기를 하나 더 얻은 기분이다.👊