public String solution(String s) {
boolean evenOrNot = true;
char[] charArray = new char[s.length()];
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == ' ') {
charArray[i] = s.charAt(i);
evenOrNot = true;
} else {
if (evenOrNot) {
charArray[i] = 'A' <= s.charAt(i) && s.charAt(i) <= 'Z' ? s.charAt(i) : (char) (s.charAt(i) - 32);
evenOrNot = false;
} else {
charArray[i] = 'a' <= s.charAt(i) && s.charAt(i) <= 'z' ? s.charAt(i) : (char) (s.charAt(i) + 32);
evenOrNot = true;
}
}
}
return String.valueOf(charArray);
}
알고리즘 문제를 오랜만에 풀어서 한참 헤메다가 풀었다!!
배열을 하나 만들어놓고,
(배열 크기는 초기화 할 때 정해줘야 하기 때문에 s.length() 로 넣어줬다.)
빈칸 일 때는 그냥 넣어주고,
빈칸이 아닐때는 evenOrNot로 짝수인지 판단한 뒤, 대소문자를 알맞게 변형해준다.
마지막으로 이전에 배웠던 String.valueOf() 로 배열을 string으로 바꿔줬다.
막히거나 오래 걸렸던 부분은...
'A' <= s.charAt(i) && s.charAt(i) < 'Z'
라고 쓴게 보였다.
'A' <= s.charAt(i) && s.charAt(i) <= 'Z'
이렇게 했어야지!! 이녀석 멍청한 녀석 실수를 줄이자. 실수도 실력이다.
split method 라는게 있어서 s.split("") 라고 하면 string을 array로 바꿔주는게 있더라.
"(내용)" (내용)을 기준으로 문자열을 나눠서 문자열의 배열로 만들어줌.
<예시>
String str2 = "서울,대전,대구";
String[] cityArr = str2.split(",");
for (int i = 0; i < cityArr.length; i++){
System.out.println(cityArr[i]);
}
서울
대전
대구
그냥 "" 으로 선언하면 전부 다 나눠버림.
String에 대해 toUpperCase는 대문자, toLowerCase는 소문자로 바꿔주는 기능도 있고..!
.toUpperCase(); -> 소문자만 대문자로
.toLowerCase(); -> 대문자만 소문자로
.trim(); -> 공백 제거
그걸 보고는 나도 따라 써봤다. (향상된 for문도!)
public String solution(String s) {
boolean evenOrNot = true;
String[] array = s.split("");
String answer="";
for(String a : array) {
a = a.equals(" ") ? a : (evenOrNot ? a.toUpperCase() : a.toLowerCase());
evenOrNot = a.equals(a.toLowerCase()); //빈칸 -> true, 소문자-> true, 대문자-> false
answer+=a;
}
return answer;
}
evenOrNot이 아니라, count라는 변수를 선언해도 된다.
count%2==0 에 대해 판단 한 뒤, 대소문자로 바꿔주는 로직.