Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 파라미터
- @RequestParam
- property
- @Value
- yml
- 디자인 패턴
- DTO
- 플라이웨이트
- 프로퍼티
- 로그인
- actuator
- Request
- 코드워즈
- Spring
- JWT
- ResponseDto
- 코딩테스트
- redis
- 헬스체크
- springboot
- RequestParam
- Codewars
- enum
- response
- 반환
- Docker
- Boot
- Security
- @RequestBody
- RequestBody
Archives
- Today
- Total
있을 유, 참 진
[CodeWars] Highest Scoring Word 본문
처음에 풀었던 방법
문장을 단어로 분할 -> 단어를 캐릭터로 변환 후 점수를 계산(알파벳 enum을 활용), 문자열의 아스키 코드를 그대로 사용하려고 했는데 원하는 답이 나오지 않아 해당 방법을 사용함
package _code_wars;
public class HighestScoringWord {
public static void main(String[] args) {
String test = "man i need a taxi up to ubud";
String test2 = "what time are we climbing up to the volcano";
String test3 = "take me to semynak";
System.out.println(high(test));
System.out.println(high(test2));
System.out.println(high(test3));
}
public static String high(String s) {
long highestScore = 0;
int highestNumber = 0;
// 문장을 단어로 분할
String[] words = s.split(" ");
// 단어를 캐릭터로 변환 후 점수를 계산
for(int i = 0; i < words.length; i++) {
if(getWordScore(words[i]) > highestScore) {
highestScore = getWordScore(words[i]);
highestNumber = i;
}
}
return words[highestNumber];
}
private static long getWordScore(String word) {
int result = 0;
char[] chars = word.toCharArray();
for (char c : chars) result += Alphabet.valueOf(String.valueOf(c)).getInt();
return result;
}
public enum Alphabet {
a(1), b(2), c(3), d(4), e(5), f(6), g(7), h(8), i(9), j(10), k(11), l(12), m(13), n(14), o(15), p(16), q(17), r(18), s(19), t(20), u(21), v(22), w(23), x(24), y(25), z(26);
public int num;
Alphabet (int n) {
this.num = n;
}
public int getInt() {
return this.num;
}
}
}
개선된 코드
알파벳 enum은 만들지 않아도 된다. 원하는 알파벳의 아스키 코드 - 'a'에 + 1을 하면 해당 값을 얻을 수 있기 때문이다.
package _code_wars;
public class HighestScoringWord {
public static void main(String[] args) {
String test = "man i need a taxi up to ubud";
String test2 = "what time are we climbing up to the volcano";
String test3 = "take me to semynak";
System.out.println(refineHigh(test));
System.out.println(refineHigh(test2));
System.out.println(refineHigh(test3));
}
public static String refineHigh(String s) {
long highestScore = 0;
int highestNumber = 0;
// 문장을 단어로 분할
String[] words = s.split(" ");
// 단어를 캐릭터로 변환 후 점수를 계산
for(int i = 0; i < words.length; i++) {
if(getWordScore(words[i]) > highestScore) {
highestScore = refineGetWordScore(words[i]);
highestNumber = i;
}
}
return words[highestNumber];
}
private static long refineGetWordScore(String word) {
int result = 0;
char[] chars = word.toCharArray();
for (char c : chars) result += c - 'a' + 1;
return result;
}
}
Comments