2023년 1월 1일
08:00 AM
Buffering ...

최근 글 👑

[Swift] Programmers - 가운데 글자 가져오기

2024. 3. 11. 02:36ㆍIOS/Swift-Algorithm (Programmers)
SMALL

https://school.programmers.co.kr/learn/courses/30/lessons/12903

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

* 가운데 글자 가져오기 *

단어 "s"의 가운데 글자를 반환하는 함수, solution을 만들어 보세요.

단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

 

* 제한사항 *

"s"는 길이가 "1" 이상, "100"이하인 string 입니다.

 

* 알고리즘 분석과 이해 *

알고리즘은 주어진 문자열의 가운데 글자나 글자들을 찾아야 합니다.

만약 문자열의 길이가 홀수라면 하나의 가운데 글자를 반환하고,

짝수라면 개의 가운데 글자를 반환해야 합니다.

가장 간단한 방법은 문자열의 길이를 확인하고,

홀수인 경우 가운데 글자를 반환하고,

짝수인 경우 가운데 글자를 반환하는 것입니다.

 

* 로직구상 *

주어진 문자열의 길이를 확인해야 하니까 문자열의 "count" 프로퍼티의 사용이 필요하고,

문자열의 길이가 홀수인지 짝수인지 확인 해야하니 나머지 연산자 %를 사용 해야하고,

홀수와 짝수는 나머지가 각각 1과 0이 되는 특성을 이용하여 판별할 수 있겠고,

홀수일 경우 가운데 글자를 반환하고, 짝수일 경우 가운데 글자를 반환해야하니까

문자열의 인덱스를 계산해야 할 것 같네요.

index(_:offsetBy:) 메서드를 사용하여 가운데 글자나 글자들의 인덱스를 계산 있겠고

해당 인덱스를 사용해서 원하는 부분 문자열을 추출할 수 있게 되는 것이죠.

* 코드구성 *

func solution(_ s: String) -> String {

먼저, 주어진 문자열에서 가운데 글자나 글자들을 반환해 줄수 있도록

함수의 이름은 solution, 입력으로 문자열 s 받을 수 있도록 함수를 정의해줍니다.

let length = s.count

다음으로 문자열 s 길이를 구해주어야 해요

문자열의 "count" 프로퍼티를 사용하여

문자열의 길이를 변수 "length" 저장해 줍시다.

 

if length % 2 == 0 {

문자열의 길이가 짝수인지 확인하기 위해 나머지 연산자 % 사용하는데

만약 길이가 짝수이면 조건문이 참이 되어 짝수 길이의 문자열이라고 판별하겠죠?!

let start = s.index(s.startIndex, offsetBy: (length / 2) - 1)
let end = s.index(s.startIndex, offsetBy: (length / 2) + 1)

길이가 짝수인 경우, 가운데 글자의 범위를 구해줍니다.

index(_:offsetBy:) 메서드를 사용하여 시작 인덱스와 인덱스를 찾아줍니다.

그리고 중심부의 글자를 구하기 위해 (length / 2) - 1 (length / 2) + 1 사용해줘요.

 

return String(s[start..<end])

구한 범위의 부분 문자열을 반환해주고

이를 위해 "String(_:substring) 생성자"를 사용하여

해당 범위의 문자열을 새로운 문자열로 만들어 줍니다.

 

 

} else {

만약 문자열의 길이가 홀수라면,

즉, 위의 조건문이 거짓이라면

홀수 길이의 문자열이라고 판별해주도록 해줍니다.

 

let middleIndex = s.index(s.startIndex, offsetBy: length / 2)

홀수 길이의 문자열에서 가운데 글자를 찾기 위해 가운데 인덱스를 계산하고,

위에서 설명한 방법과 마찬가지로 index(_:offsetBy:) 메서드를 사용해서 가운데 인덱스를 찾아줍시다.

return String(s[middleIndex])
  }
}

가운데 인덱스에 해당하는 글자를 반환하고,

글자를 새로운 문자열로 만들어 반환 하면서

가운데 글자를 가져와 주며 마무리 됩니다.

 

* 전체 코드 구성 *

func solution(_ s: String) -> String {
    // 문자열의 길이를 구합니다.
    let length = s.count
    
    // 문자열의 길이가 홀수인지 짝수인지 확인합니다.
    if length % 2 == 0 {
        // 짝수인 경우 가운데 두 글자의 범위를 구합니다.
        let start = s.index(s.startIndex, offsetBy: (length / 2) - 1)
        let end = s.index(s.startIndex, offsetBy: (length / 2) + 1)
        
        // 해당 범위의 문자열을 반환합니다.
        return String(s[start..<end])
    } else {
        // 홀수인 경우 가운데 글자의 인덱스를 구합니다.
        let middleIndex = s.index(s.startIndex, offsetBy: length / 2)
        
        // 해당 인덱스의 글자를 반환합니다.
        return String(s[middleIndex])
    }
}
728x90