배열 만들기 5
문제
https://school.programmers.co.kr/learn/courses/30/lessons/181912
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
내 답안 / 다른 사람들의 답안
import Foundation
func solution(_ intStrs:[String], _ k:Int, _ s:Int, _ l:Int) -> [Int] {
var result: [Int] = []
for intStr in intStrs {
let intStrArr = intStr.map { String($0) }
var rangeStr: [String] = []
for i in 0..<l {
rangeStr.append(intStrArr[s + i])
}
let translatedInt = Int(rangeStr.joined())!
if translatedInt > k {
result.append(translatedInt)
}
}
return result
}
- intStrs 배열 내에서 반복문 실행
- 각 intStr의 element에 접근하기 위해 map을 통해 String 배열로 변환(intStrArr)
- for..in 문을 통해 0부터 l 범위 내에서 intStrArr[s + i] 인덱스의 String을 rangeStr에 추가
- rangeStr의 요소를 joined하여 Int로 형변환한 것을 translatedInt에 저장하고, 해당 값이 k보다 크다면 result에 추가
- result 값을 반환
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(_:) | Apple Developer Documentation
Returns a subsequence, up to the specified maximum length, containing the initial elements of the collection.
developer.apple.com
suffix(_:) | Apple Developer Documentation
Returns a subsequence, up to the given maximum length, containing the final elements of the collection.
developer.apple.com
- intStrs를 map 메서드를 사용하여 각 항목별로 클로저 내부의 코드를 수행
- 각 항목($0)은 prefix를 통해 s + l 만큼의 단어를 떼어내고(s + l은 맨 앞에서부터 원하는 문자열까지를 포함한 범위임) suffix를 통해 뒤에서 l만큼의 단어를 떼어냄(s 이전의 문자열 제외)
- 그렇게 모인 Int 요소들 중에서 filter를 통해 k보다 큰 값을 고르고 반환