Codewars 문제풀기 (03/02)
Highest and Lowest
-
정수로 구성된 문자열을 인자로 받아서 ‘최대값 최소값’ 포맷으로 출력
-
highAndLow(“1 2 3 4 5”) –> “5 1”
-
입력 문자열은 1개 이상의 숫자로 구성
1. Test를 만들었다
-
숫자가 하나일 때
입력한 숫자를 ‘최대값 최소값’ 포맷으로 출력하면 되겠구나
public static String highAndLow(String numbers){ return numbers + " " + numbers; }
-
숫자가 두개 이상일 때
문자열 중 최대값과 최소값을 찾는 로직을 구현하면 되겠구나
public static String highAndLow(String numbers){ String[] numberList = numbers.split(" "); int highestNumber = Integer.parseInt(numberList[0]); int lowestNumber = Integer.parseInt(numberList[0]); for(String target : numberList) { int parseToInt = Integer.parseInt(target); if(parseToInt > highestNumber) { highestNumber = parseToInt } if(parseToInt < lowestNumber) { lowestNumber = parseToInt } } return highestNumber + " " + lowestNumber; }
Success.
2. 리팩토링 시작
if문으로 비교하는거보다 Math.max, min을 사용하는게 더 깔끔할거 같아서 사용했다.
public static String highAndLow(String numbers) {
String[] numberList = numbers.split(" ");
int highestNumber = Integer.parseInt(numberList[0]);
int lowestNumber = Integer.parseInt(numberList[0]);
for(String target : numberList) {
int parseToInt = Integer.parseInt(target);
highestNumber = Math.max(higestNumber, parseToInt);
lowestNumber = Math.min(lowestNumber, parseToInt);
}
return highestNumber + " " + lowestNumber;
}
max, min 메소드를 사용하고 보니까, highest, lowest도 그냥 max, min으로 고쳐도 될거같다 라고 생각했는데 그냥 제출했다.
3. 답 비교, 느낀점
Best Practice 가장 많이 받은 코드
public static String highAndLow(String numbers){
int min = Arrays.stream(numbers.split(" "")).mapToInt(Integer::parseInt).min().getAsInt();
int max = Arrays.stream(numbers.split(" ")).mapToInt(Integer::parseInt).max().getAsInt();
return String.format("%d %d", max,min);
}
- 스트림과 람다식을 이용하면 매우 간단하게 풀 수 있구나 라고 느꼈다. 근데 아직 스트림, 람다에 대해 잘 모르므로 공부할필요가 있다고 느꼈다.
내가 푼 방법과 가장 비슷한 코드
public class Kata {
public static String HighAndLow(String numbers) {
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
String nums[] = numbers.split(" ");
for(String s: nums) {
int num = Integer.parseInt(s);
max = Math.max(max, num);
min = Math.min(min, num);
}
return "" + max + " " + min;
}
}
- max, min으로 이름짓는게 더 보기 편하다고 느꼈다.
- Integer.MIN_VALUE, MAX_VALUE가 있구나 이걸로 표현하는게 더 낫겠다.
4. 궁금한거 공부
-
스트림과 람다
‘Effective Java’ 책에 한 챕터로 구분될 만큼 양이 많기 때문에 따로 공부해야겠다.
간단하게 알아보니
스트림 생성 - 가공 - 처리 개념이라고 한다.
Arrays.stream(numbers.split(“ “))으로 생성
mapToInt(Integer::parseInt).min()으로 가공
getAsInt()로 처리
개념으로 보면 될거같은데 관련 API가 매우 많으니 한번 깊게 알아볼 필요가 있을것 같다.
댓글남기기