
아놔 스트링 index접근을 매일 까먹는다..바보냐고!!!!! 제목에서 나의 빡침이 느껴질련지는 모르겠지만 이참에 확실히 외워야 겠다는 생각을 다시 한다..
String.index(_:offsetBy:)문자열에서 특정 인텍스를 찾기위한 메서드이다. 첫번째 매개변수에는 인덱스를 계산하는 기준이 되는 위치(startIndex)를, 두번째 매개변수에는 위치에서부터의 이동ㄱ리를 나타내는 정수값을 넣는다.
let str = "Hello, World!"
// 문자열의 시작 위치부터 7번째 문자까지의 인덱스를 찾음
let index = str.index(str.startIndex, offsetBy: 7)
// 찾은 인덱스를 사용하여 해당 위치의 문자에 접근
print(str[index]) // 출력: "W"

Subscript 'subscript(_:)' requires that 'String.Index' conform to 'RangeExpression' : 문자열을 인덱싱할 때 발생하는 에러라고 한다. 문자열을 인덱싱하기 위해서는 w즉 []를 통해 접근하기 위해서는 이 괄호 사이에 String.index타입이 들어가야하는데 그 타입이 들어가지 않았다는것!! 아니 그런데 바로 위의 if절에는 에러가 안나는데 이 코드에서 에러가 나는 이유를 모르겠다🤬🤬🤬
혹시 몰라서 index 부분을 분리해서 코드를 짜보았다. 그러니까 에러가 사라졌다... 황당하다
그리고 리스트를 string으로 만드는 방법으로 .joined()메서드를 사용했다.
.joined()이 메서드는 배열에 사용되는 메서드로, 배열의 각 요소를 하나의 문자열로 결합하는데 사용된다고 한다. 배열에 포함된 요소들을 모두 이어붙여 두는데 요소들 사이에 구분자를 추가할 수도 있다. 요소들의 구분자를 추가하려면, 예를들어 요소들사이에 한칸씩 뛰우려면 .joined(seperator: " ")를 사용하면 된다.
let fruits = ["Apple", "Banana", "Orange"]
let result = fruits.joined()
print(result) // 출력: "AppleBananaOrange"
그렇게 제출한 정답 코드는 다음과 같다.
func solution(_ s:String) -> String {
var arr: [String] = []
var x = 0
for i in s {
if x % 2 == 0 {
arr.append(String(i.uppercased()))
} else {
arr.append(String(i.lowercased()))
}
x += 1
if i == " " {
x = 0
}
}
return arr.joined()
}