https://programmers.co.kr/learn/courses/30/lessons/12951
[ 문제 설명 ]
JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다.
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.
[ 제한 사항 ]
[ 입출력 예시 ]
s | return |
---|---|
"3people unFollowed me" | "3people Unfollowed Me" |
"for the last week" | "For The Last Week" |
- 첫 문자의 기준은 띄어쓰기를 기준으로 그 다음 나타난 문자라고 볼 수 있다.
따라서 boolean을 통해 띄어쓰기 기준을 잡아준다.
(나는 true일 때 첫 문자로 판단하도록 나타내고 true일 때 대문자로 변경해줬다.)
- 우선 입력 받은 문자열을 모두 문자열.toLowerCase();를 통해 문자 모두 소문자로 바꾸고 split("")을 통해 문자열 배열에 한 문자씩 담아두었다.
- 가장 첫 문자는 당연히 대문자일테니 boolean값을 true값으로 시작한다.
if문을 통해 true값이면 들어온 값을 문자열.toUpperCase();을 통해 대문자로 받아
StringBuilder에 append 해주고 boolean값을 false값으로 변경한다.
- 그 다음 값들은 띄어쓰기가 나올 때 까지 한 문자 한 문자 append 해주고 들어온 값이 공백(" ") 값이라면 boolean을 true값으로 변경하여 이를 반복하여 StringBuilder에 담아준다.
- answer에 StringBuilder.toString()을 통해 최종 문자열을 answer에 담고 값을 반환한다.
[처음 풀은 코드]
class Solution {
public String solution(String s) {
String answer = "";
s = s.toLowerCase();
boolean swit = true;
char[] c = s.toCharArray();
for(int i=0; i<c.length; i++) {
if(c[i] >= '0' && c[i] <='9') {
answer += c[i];
swit = false;
}
else if(c[i] == ' ') {
answer += c[i];
swit = true;
}
else {
if(swit == true) {
answer += (char)(c[i]-32);
swit = false;
}
else {
answer += (char)(c[i]);
swit = false;
}
}
}
return answer;
}
}
[ 벨로그 작성하면서 더 간단히 할 수 있을 거 같아서 다시 작성 해본 코드]
class Solution {
public String solution(String s) {
StringBuilder sb = new StringBuilder();
String answer = "";
String[] strArr = s.toLowerCase().split("");
boolean swit = true;
for(String w : strArr) {
if(swit == true) {
sb.append(w.toUpperCase());
swit = false;
}
else if(swit == false){
sb.append(w);
}
if(w.equals(" ")) {
swit = true;
}
}
return answer = sb.toString();
}
}