CodeWars 쉰 한 번째 문제
Updated:
CamelCase Method
public class Solution {
public static String camelCase(String str) {
String[] split = str.trim().split(" ");
for(int i = 0 ; i < split.length; i++) {
split[i] = (split[i].length() > 0 ? split[i].substring(0,1).toUpperCase() : "")
+ (split[i].length() > 1 ? split[i].substring(1): "");
}
return String.join("", split);
}
}
- Best 알고리즘이랑 같은 알고리즘이었으나 정규표현식 사용과 substring에 대한 깊은 고찰이 나랑 차이가 있었다.
- 일단 정규표현식에 +을 붙이면 1개이상 중복될 수있다는 뜻이다. 그래서 split(“ +”)의 경우 띄어쓰기가 가운데 2개 이상 있으면 그걸 다 제거해준다는 것이다 단순 split(“ “)을 쓰면 띄어쓰기가 2개 있다면 띄어쓰기 가운데 빈 string이 나누어질 것이다. 따라서 +를 이용해서 내가 짠 코드에서 split[i]의 길이를 비교할 필요는 없을 것이다.
- 그리고 substring의 두 번째 인자 값에 split[i]의 길이를 넣는다면 substring(1,1)을 넣어도 상관없어진다.
public static String camelCase(String str) {
if(str.length() == 0) {
return "";
}
String[] split = str.trim().split(" +");
for(int i = 0 ; i < split.length; i++) {
split[i] = split[i].substring(0,1).toUpperCase()
+ split[i].substring(1, split[i].length());
}
return String.join("", split);
}
- 다른 코드들의 경우 for 을 두 번 쓰거나 수식이 많아서 한 번에 보기 힘들었다.
- 허나 위의 best 코드의 경우 경우의 수가 정해져 있기 때문에 각 자리숫자(1000, 100) 등으로 나누어 나온 수에 맞는 final에서 찾아 그대로 반환하는 쉬운 알고리즘으로 되어 있다.
- 어차피 다른 코드의 경우에는 4(or 40, 400) 와 9(90, 900)에 대한 숫자 처리로 코드가 늘어질 수 밖에 없었다. 코드 확장성을 배제할 경우에는 위가 최고인듯 하다.