코딩테스트 연습 > 연습문제
JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.
제한 조건
s는 길이 1 이상 200 이하인 문자열입니다.
s는 알파벳과 숫자, 공백문자(" ")로 이루어져 있습니다.
숫자는 단어의 첫 문자로만 나옵니다.
숫자로만 이루어진 단어는 없습니다.
공백문자가 연속해서 나올 수 있습니다.
입출력 예
| s | return |
|--------------------------|----------------------------|
| "3people unFollowed me" | "3people Unfollowed Me" |
| "for the last week" | "For The Last Week" |
import java.util.*;
class Solution {
public String solution(String s) {
StringBuilder sb = new StringBuilder();
String[] arr = s.split(" ");
for(int i=0; i<arr.length; i++) {
String str = arr[i];
if (str.isEmpty()) {
sb.append(" ");
}else{
sb.append(Character.toUpperCase(str.charAt(0)));
sb.append(str.toLowerCase().substring(1));
sb.append(" ");
}
}
String string = sb.toString();
if(s.endsWith(" ")) return string;
return string.substring(0, string.length() - 1);
}
}
흠... 어려운 것 같지는 않았던 것 같은 문제였는데 테스트 케이스에서 자꾸 걸리더군요 그래서 계속 해봤는데 마지막엔 한 문제만 안풀려 대체 뭘까?를 계속 생각해봤습니다.
마지막 공백이였어요..... 마지막 공백은 보이지도 않기 때문에 참.... 알아차리기 쉽지 않았어여;;
아무튼 이 하나에 께속 매달려서 고치면 정답률이 더 낮아지고 참 머리가 많이 꼬였는데 결국 풀어냈습니다.^^

요 8번이 저를 괴롭혔습니다.
import java.util.regex.*;
class Solution {
public String solution(String s) {
Matcher m = Pattern.compile("\\b([\\w])([\\w]*)").matcher(s);
while (m.find()) {
s = s.replaceAll("\\b" + m.group(), m.group(1).toUpperCase() + m.group(2).toLowerCase());
}
return s;
}
}
이걸 보고 코드길이 차이가 참 비교되네요....
그리고 보니 MAtcher 나 Pattern .compile() 등 정규 표현식을 위한 기능들이 꽤 있다는 것도 알았습니다. 정규표현식이 아직 쓸일이 없어 잘 몰랐는데 리눅스 CLI 환경에서 꽤 쓰인다고 하네요. 나중에 정규표현식에 대해 공부하면 좀 더 쉬워지지 않을까 싶긴하네요 프로그래머스 문제.
이상입니다.