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])
    }
}