CodeWars 일흔 다섯 번째 문제

Updated:

Consonant value

public static String encryptThis(String text) {
      
    if("".equals(text)) {
        return "";
    }

    String[] textSplit = text.split(" ");

    for(int i = 0; i < textSplit.length; i++) {
        textSplit[i] = String.valueOf((int)textSplit[i].charAt(0))+ switchChar(textSplit[i].substring(1));
    }

    return String.join(" " , textSplit);
}

private static String switchChar(String string) {

    if(string.length() == 0) {
        return "";
    } else if(string.length() == 1) {
        return string;
    } else if(string.length() == 2) {
        return string.substring(string.length()-1) + string.substring(0,1);
    } else {
        return string.substring(string.length()-1) + 	string.substring(1,string.length()-1) + string.substring(0,1);
    }
}
  • Best 코드는 다이다믹 코딩으로 짰다.
  • 나는 정규식으로 split한 후에 각 단어당 값을 max 값을 비교하였다.
  • 그래서 결과적으로 이중 for을 사용한 것인데 아래 Best 코드의 경우 for 한번으로 끝내었다.
  • 이건 그래도 코드가 이해가 가서 다행이었다.
  • 근데 이정도는 생각할 수 있을 것 같은데 집에서 하니까 머리가 굳은듯
  • 그리고 이거 웹사이트에 문제에서는 zodiacs나오고 tdd에서는 zodiac으로 나온다. 즉, 마지막에 s를 빼먹는다. 돌리고 안된다고 골머리 싸지말라. s가 빼먹어서 그런거니 그냥 자신이 추가하면 됨.
public static int solve(final String s) {
    int sum = 0, maxsum = 0;
    char[] arr = s.toCharArray();
    for (char c : arr) {
        if ("aeiou".indexOf(c)>=0) sum = 0;
        else {
            sum += c-'a'+1;
            maxsum = Math.max(sum, maxsum);
        }
    }
    return maxsum;
}