CodeWars 마흔 아홉 번째 문제

Updated:

Highest Scoring Word

public static String high(String s) {
    
    String[] splitString = s.split(" ");
    String maxWord = splitString[0];
    
    for(String word : splitString) {
      if(compareWord(word, maxWord)) {
        maxWord = word;
      }
    }
    
    return maxWord;
  }

  private static boolean compareWord(String word, String maxWord) {
    
    if(scoreWord(word) > scoreWord(maxWord)) {
      return true;
    }
    
    return false;
  }

  private static int scoreWord(String word) {
        
    char[] wordchar = word.toCharArray();
    int count = 0;
    
    for(int i=0; i < wordchar.length ; i++) {
      count += wordchar[i]-96;
    }
    
    return count;
  }
  • 문제는 언뜻 쉬워 보였다. 그러나 volacno와 climbing 비교에서 문제가 발생하였다.
  • 단순 문자들을 아스키코드로 더해서 비교하면 될듯 했으나 여기서 함정이 있었다.
  • 문자 ‘a’는 아스키 코드 값이 97이다. z는 여기에 26을 더한 123이다.
  • 그런데 문자열의 갯수가 같으면 그냥 더해도 상관이 없다.
  • 그러나 문자열의 갯수가 다르면 그냥 아스키코드로 더하면 문제가 발생한다.
  • 예를 들어 ‘c’와 ‘aa’를 비교하면 당연 ‘c’가 크다.
  • 그러나 그냥 아스키 코드로 더해서 비교하면 ‘aa’가 크게 나온다.
  • 왜냐하면 ‘aa’는 97+97을 더한 194이고 ‘c’는 99이기 때문이다.
  • 따라서 아스키코드로 더할 때는 96(a를 1이라고 표현하고 싶을때) or 97을 빼주던가 ‘a’를 빼줘야 한다.
  • Best 코드는 나랑 같은 코드였다. 리펙토링하면 내가 더 깔끔하다^^