🔴 문제
문제 설명
단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.
제한사항
s는 길이가 1 이상, 100이하인 스트링입니다.
입출력 예
s return "abcde" "c" "qwer" "we"
🔵 풀이 1 - string.index 활용
s의 길이가 짝수인 경우와 홀수인 경우로 나누어,
각각 string.index를 활용하여 코드를 짰다.
func solution(_ s: String) -> String {
let len = s.count
if len % 2 == 0 {
let startIndex = s.index(s.startIndex, offsetBy: len / 2 - 1)
let endIndex = s.index(startIndex, offsetBy: 2)
return String(s[startIndex..<endIndex])
} else {
let startIndex = s.index(s.startIndex, offsetBy: len / 2)
let endIndex = s.index(after: startIndex)
return String(s[startIndex..<endIndex])
}
}
☝️ 그런데..!! 튜터님께 여쭤보니,
Swift 에서 String은 숫자형과 문자 길이가 달라서, index로 풀기 까다로우므로,
스트링을 배열로 쪼개서 푸는 방법을 추천해주셨다.
🔵 풀이 2 - 배열로 쪼개어 풀기
먼저, map을 이용해 인자로 받은 String을 Character 배열로 만든다.
문자열을 배열[Character]로 만드는 방법 : 문자열.map {$0}
s = "abcde"일 경우,
s.map {$0} = ['a', 'b', 'c', 'd', 'e'] 가 됨. (= [Character])
Swift 배열 인덱스는 0부터 시작하므로,
짝수일 경우 배열의 [글자수 / 2 - 1 ... 글자수 / 2] 를 문자열로 바꾸어 반환,
홀수일 경우 배열의 [글자수 / 2] 번째 값을 문자열로 바꾸어 반환한다.
배열을 1개의 문자열로 합치는 방법
[Character]일 경우 -> String(배열)
>> let char = ['a', 'b', 'c', 'd', 'e']
String(char) ➡️ "abcde"
[String]일 경우 -> 배열.joined(seperator: "")
>> let str = ["happy", "sad"]
str.joined(seperator: "") ➡️ "happysad"
따라서 다음과 같은 코드를 구할 수 있다.
func solution(_ s: String) -> String {
let str: [Character] = s.map {$0}
let len: Int = s.count
let lenHalf : Int = len / 2
return len % 2 == 0 ? String(str[lenHalf - 1 ... lenHalf]) : String(str[lenHalf])
}