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 코드는 나랑 같은 코드였다. 리펙토링하면 내가 더 깔끔하다^^