Codewars 문제풀기 (03/04)
Shortest Word
-
문자열을 입력하면 문자열에서 가장 짧은 단어의 길이를 반환한다.
-
findShort(“my name is leejinho”) –> 2
1. Test를 만들었다
-
파라미터가 1개의 단어일때
그냥 String의 length를 리턴하면 되겠다.
public static int findShort(String s) { return s.length(); }
-
단어가 두개 이상일 때
split 메소드를 사용해서 문자열 length를 비교하고 가장 짧은 길이를 리턴하면 되겠다.
public static int findShort(String s) { String[] wordsList = s.split(" "); int minLengthWord = Integer.MAX_VALUE; for(String eachWord : wordsList) { minLengthWord = Math.min(minLengthWord, eachWord); } return minLengthWord; }
- 전에 알게된 Integer.MAX_VALUE를 활용해봤다.
- 또한 if로 구현하지않고 바로 min메소드를 사용했다. Success.
2. 리팩토링 시작
이전에 풀었던 highest and lowest
문제를 풀면서 봤던 스트림, 람다로 풀어봤다. 물론 잘 모르지만 문제 자체는 거의 비슷한거같아서..
public static int findShort(String s) {
int min = Arrays.stream(s.split(" ")).mapToInt(i -> i.length()).min().getAsInt();
return min;
}
Success가 뜨긴했는데 i->i.length()
부분이 CheckStyle warning이 떠서 보니까 Integer::length나와서 바꿨다.
3. 답 비교, 느낀점
Best Practice 가장 많이 받은 코드
import java.util.stream.*;
public class Kata {
public static int findShort(String s) {
return Stream.of(s.split(" "))
.mapToInt(String::length)
.min()
.getAsInt();
}
}
- 똑같다.
Best Practice 두번째로 많이 받은 코드
import java.util.Arrays;
public class Kata {
public static int findShort(String s) {
int min = Integer.MAX_VALUE;
for(String each : s.split(" "))
{
if(each.length() < min)
min = each.length();
}
return min;
}
}
- 역시 똑같다. 이번문제는 너무 쉬었다 솔직히..
4. 궁금한거 공부
- 없음
댓글남기기