Swift | programmers/Lv1.
[Swift] Lv.1 가운데 글자 가져오기
iOSDEv
2024. 3. 5. 08:58
가운데 글자 가져오기
문제

나의 풀이
func solution(_ s:String) -> String {
var arr = s.map { $0 }
var middleCnt = Int(s.count / 2)
// if arr.count % 2 == 0 {
// return String(arr[middleCnt-1]) + String(arr[middleCnt])
// } else {
// return String(arr[middleCnt])
// }
return arr.count % 2 == 0 ? String(arr[middleCnt-1]) + String(arr[middleCnt]) : String(arr[middleCnt])
}
String이 배열 타입인걸 알았지만 고차함수로 변형하여 풀이했다
대체왜 그랬을까유?.. 아시는분?
다른 사람의 풀이
func solution(_ s:String) -> String {
return s.count % 2 == 0 ? String(Array(s)[s.count/2-1...s.count/2]) : String(Array(s)[s.count/2])
}
다른 사람의 풀이 중에 가져와서 좀 더 짧게 수정해서 올려보았다

문자열은 기본적으로 배열로 변경 가능하고 s.count로 길이가늠이 가능하다
func solution(_ s: String) -> String {
// 주어진 문자열의 길이가 홀수인 경우
if s.count % 2 == 1 {
// 중간 글자를 반환
return String(Array(s)[s.count / 2])
} else {
// 주어진 문자열의 길이가 짝수인 경우
// 중간 두 글자를 반환
return String([Array(s)[s.count / 2 - 1], Array(s)[s.count / 2]])
}
}
=> 이 코드는 배열을 여러 번 생성하고 있어 비효율 적일 수 있다
func solution(_ s: String) -> String {
//문자열 s의 중간 인덱스를 계산
let middleIndex = s.index(s.startIndex, offsetBy: s.count / 2)
//홀수일 경우
if s.count % 2 == 1 {
return String(s[middleIndex])
} else { //짝수일 경우
//중간 위치 다음 위치를 가져옴
let endIndex = s.index(after: middleIndex)
//중간부터 다음 인덱스를 가지고 옴
return String(s[middleIndex..<endIndex])
}
}