s
문자열 | "3people unFollowed me" | s는 길이 1 이상 200 이하인 문자열, s는 알파벳과 숫자, 공백문자(" ")로 이루어짐, 숫자는 단어의 첫 문자로만 나옴, 숫자로만 이루어진 단어는 없음, 공백문자가 연속해서 나올 수 있음
s를 JadenCase로 바꾼 문자열을 return
(JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열로 구성됨. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 써야함)
StringTokenizer를 이용해 문자열을 하나씩 받아와서, 첫 문자면 숫자,대문자만 가능하게 뒤의 문자면 소문자만 가능하게 조건문을 달아 2중 반복문으로 구현하고자 했음
=> 공백문자가 연속해서 나올 수 있기 때문에 StringTokenizer를 이용하면 몇개의 공백이 중간에 들어가 있었는지 구분이 어려울 것이라 생각
문자열 처음부터 끝까지를 보는 반복문 하나를 이용해 내부 조건문을 써서 해결하고자 했음
=> 공백 / 첫글자 / 마지막 글자 의 3가지 경우로 나누어 조건을 추가함
import java.util.*;
class Solution {
public String solution(String s) {
StringBuilder sb = new StringBuilder();
boolean first = true;
for(int i=0; i<s.length(); i++){
char c = s.charAt(i);
if(c == ' '){
sb.append(" ");
first = true;
continue;
}
if(first){
if('a'<=c)
c -= 'a'-'A';
sb.append(c);
first = false;
continue;
}
if(c<'a')
c += 'a'-'A';
sb.append(c);
}
return sb.toString();
}
}
=> 코드의 효율성은 좋아보이지만, 깔끔하게 코드가 작성되진 못한 것 같다.
char c = 'z' - 'A';
System.out.println(c); // 9
System.out.println('z' - 'A'); // 57
System.out.println((char)('z' - 'A')); // 9
Tip : 문자형 변수에 문자끼리 계산한 결과 값을 넣고 출력하는 것과 바로 출력하는 경우는 다른 결과를 도출할 수도 있다.