Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Algorithm] 가운데 글자 가져오기 #7

Closed
2 tasks done
hwangJi-dev opened this issue Aug 1, 2022 · 0 comments
Closed
2 tasks done

[Algorithm] 가운데 글자 가져오기 #7

hwangJi-dev opened this issue Aug 1, 2022 · 0 comments

Comments

@hwangJi-dev
Copy link
Owner

hwangJi-dev commented Aug 1, 2022

📌 TODO

  • 문제 풀이
  • 정리

가운데 글자 가져오기

💬 Idea

  • 홀수 / 짝수를 구분
    • 짝수일 경우에는 문자열의 중앙에 위치한 2개의 문자를 추출하기 위해 s.count / 2 위치부터 s.count / 2 + 1 위치까지의 문자를 추출한다.
    • 홀수일 경우에는 문자열의 중앙에 위차한 1개의 문자를 추출하기 위해 s.count / 2 위치의 문자 하나를 추출한다.

💬 풀이

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

    if s.count % 2 == 0 {
        let index = s.index(s.startIndex, offsetBy: s.count / 2 - 1)..<s.index(s.startIndex, offsetBy: s.count / 2 + 1)
        return String(describing: s[index])
    } else {
        let index = s.index(s.startIndex, offsetBy: s.count / 2)
        return String(describing: s[index])
    }
}

소요시간 : 20분 4초


💬 더 나은 방법?

  • String.Index를 사용하여 간단하게 String을 반환하기
  • 홀수, 짝수의 경우를 구분하지 않고 수식으로 해결하기
func solution(_ s:String) -> String {

    return String(s[String.Index(utf16Offset: (s.count - 1) / 2, in: s)...String.Index(utf16Offset: s.count / 2, in: s)])
}

💬 알게된 문법

✅ String.Index

  • 문자열에서 문자 또는 코드 단위의 위치
    • 지정된 UTF-16 코드 단위 오프셋에서 새 인덱스를 만든다.

    • Swift 문자열에서는 string[0]과 같이 index를 통한 접근이 불가능하다.

      'subscript(_:)' is unavailable: cannot subscript String with an Int, use a String.Index instead.
      
      //**'subscript(_:)'를 사용할 수 없습니다. String을 Int로 첨자할 수 없습니다. 대신 String.Index를 사용하세요.**
    • 따라서 String.Index를 사용하여 문자열의 인덱스에 접근할 수 있다.

  • init(utf16Offset:in:)
    • index를 복잡하게 구하지 않고 정수(Int)를 이용하여 쉽게 구할 수 있는 이니셜라이저

      String(s[String.Index(utf16Offset: (s.count - 1) / 2, in: s)...String.Index(utf16Offset: s.count / 2, in: s)])

✅ Array(s)

  • Array를 사용하여 문자열을 배열로 변환합니다.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant