문제링크
문제 접근
- spilt해서 하려고 했으나 공백문자가 연속해서 나올 수 있으므로 그냥 for문 하나로 하자
- 반복문 돌면서 isFirst 플래그로 단어의 첫 문자인지 확인
- 공백 만났을 때
- 공백 붙히기
- isFirst True로 바꾸기
- 단어의 첫 문자일 때(isFirst가 true인데 공백이 아닌 문자 만났을 때)
- 숫자 or 대문자면 그대로 붙히기
- 소문자면 대문자로 바꾸고 붙히기
- isFirst False로 바꾸기
- 단어의 첫 문자가 아닌 문자일 때(isFirst가 false이고 문자일 때)
- 대문자면 소문자로 바꾸고 붙히기
- 소문자면 그대로 붙히기
코드
import java.util.*;
class Solution {
public String solution(String s) {
StringBuilder answer = new StringBuilder();
String[] words = s.split(" ");
boolean isFirst = true;
for(int i=0;i<s.length();i++){
char now = s.charAt(i);
// 공백 만났을 때
if(now == ' '){
answer.append(' ');
isFirst = true;
}
// 단어의 첫 단어일 때
else if(isFirst && now >= 48 && now <= 57){
answer.append(now);
isFirst = false;
}
else if(isFirst && now >= 65 && now <= 90){
answer.append(now);
isFirst = false;
}
else if(isFirst && now >= 97 && now <= 122){
isFirst = false;
answer.append((char) (now-32) );
}
// 단어의 첫 단어가 아닐 때
else if(!isFirst && now >= 65 && now <= 90){
answer.append((char) (now+32) );
isFirst = false;
}
else if(!isFirst && now >= 97 && now <= 122){
isFirst = false;
answer.append(now);
}
}
return answer.toString();
}
}
결과

정리
- 공백이 연속으로 있는 문자열에 대해 split() 결과가 확실하지 않았다.
뛰어난 글이네요, 감사합니다.