문자열
s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
- 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
- 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

- 입출력 예 설명
:"try hello world"는 세 단어"try","hello","world"로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면"TrY","HeLlO","WoRlD"입니다. 따라서"TrY HeLlO WoRlD"를 리턴합니다.
❌ 문자열
s의 문자들을toLowerCase()를 통해 모두 소문자로 변환한 후, 짝수 인덱스만toUpperCase()로 바꿀 수 있도록 로직을 짜보았다.
split(" ")을 통해 문장을 공백 단위로 잘라서 각 단어들을 배열word[]에 담아주고, 각 단어를 다시split("")으로 한 문자씩 잘라서 배열str[]에 담아 단어별로 각 문자의 인덱스가 짝수이면 대문자로 변환해주었다. 변환 작업이 끝나면 String 클래스의join(구분자, 배열)을 사용하여 String 타입의 배열을 문자열로 간단하게 만들 수 있다! 해당 작업을 모든 단어에 끝낸 후 최종적으로String.join(" ", word)를 리턴해주면word[]의 각 단어를 공백을 기준으로 결합해서 최종 문장을 리턴할 수 있다.
아래 코드로 테스트 케이스는 통과했는데, 어째서인지 실제 제출에서는 몇 개의 케이스에서 실패가 떴다,,
class Solution {
public String solution(String s) {
s = s.toLowerCase();
String[] word = s.split(" ");
for(int i=0;i<word.length;i++) {
String[] str = word[i].split("");
for(int j=0;j<str.length;j++) {
if(j%2 == 0) str[j] = str[j].toUpperCase();
}
word[i] = String.join("", str);
}
return String.join(" ", word);
}
}

✅ 다른 사람들의 질문들과 코드를 보니, 문장의 가장 앞 뒤에 공백이 들어가거나, 공백이 하나 이상인 경우에는 공백 자체를 문자열로 취급해서 리턴해줘야 한다고 한다. 예를 들어,
s가" aaa "인 경우, 공백을 포함해서" AaA "를 리턴해야 한다.
위 코드처럼split(" ")로 문자열을 분리하면 공백을 모두 제거하므로 단어aaa만word[]에 담겨서 제대로 된 문장을 리턴할 수 없게 된다.split(" ")에 한계치로 -1을 넣어줌으로써 해결할 수 있었다 :split(" ", -1). 한계치에 -1을 넣으면 분할 수에 제한이 없으므로, 공백을 기준으로 최대한 많이 분할할 수 있게 되어 공백또한 분할 대상에 포함되는 것이다.
class Solution {
public String solution(String s) {
s = s.toLowerCase();
String[] word = s.split(" ", -1);
for(int i=0;i<word.length;i++) {
String[] str = word[i].split("");
for(int j=0;j<str.length;j++) {
if(j%2 == 0) str[j] = str[j].toUpperCase();
}
word[i] = String.join("", str);
}
return String.join(" ", word);
}
}
