첫 문자는 대문자 나머지 문자는 소문자로 바꾸어야 하는 문제이다.(첫 문자가 숫자이면 상관x) 자바는 파이썬과 다르게 첫 문자만 바꾸는 메소드가 존재하지 않으므로
1. 첫 문자와 나머지 문자들을 분리
2. 첫 문자는 대문자 나머지 문자는 소문자
3. 합치는 작업
을 직접 구현해야 한다.
보통 일반적으로 생각하는, 첫 문자와 나머지 문자들을 분리후 String.toUpperCase()
와 String.toLowerCase()
사용 후 str1.concat(str2)
나 str1.append(str2)
로 합치면 단어에는 잘 적용 되지만 단어와 단어 사이 공백이 2개 이상
일 경우 합치는 과정에서 공백이 누락
하는 문제 발생!
단어 단위로 나누고 조절하고 다시 합치는 알고리즘이 문제가 있다면 문자 단위로 확인 후 바꾸어 보자
한 문자씩 확인하여 이전 문자가 공백(' ')
이었다면 현재 문자는 대문자
가 와야 한다.
현재도 공백이고 이전도 공백이면 공백의 toUpperCase()는 같은 공백이니 걱정할 필요가 없다.
for(int i=1;i<s.length();i++){ //두번째 문자부터 비교 시작
temp = s.charAt(i);
if(s.charAt(i-1) == ' ') //이전 문자가 공백이면
temp = Character.toUpperCase(temp); //대문자
else{ // 공백이 아니면
temp = Character.toLowerCase(temp); //소문자
}
answer += temp; //문자를 추가
}
class Solution {
public String solution(String s) {
String answer = s.substring(0,1);
char temp; //비교할 문자를 저장
answer = answer.toUpperCase(); //문장의 첫 문자는 무조건 대문자
for(int i=1;i<s.length();i++){ //두번째 문자부터 비교 시작
temp = s.charAt(i);
if(s.charAt(i-1) == ' ') //이전 문자가 공백이면
temp = Character.toUpperCase(temp); //대문자
else{ // 공백이 아니면
temp = Character.toLowerCase(temp); //소문자
}
answer += temp; //문자를 추가
}
return answer;
}
}