문제
나의 생각
해당 문제는 stream에 있는 sort를 활용하여 해결한 문제이다. compare함수를 사용하여 -1 , - ,1 값을 반환 받아서 앞으로 가야하는지 가만히 있어야 하는지, 뒤로가야하는지 판단하고 처리하는 방식이다.
나의 답안
public int[] solution(int[] numlist, int n) {
return Arrays.stream(numlist)
.boxed()
.sorted((a,b) -> Math.abs(a - n) == Math.abs(b - n) ? b.compareTo(a) : Integer.compare(Math.abs(a-n), Math.abs(b -n)))
.mapToInt(Integer::intValue)
.toArray();
}
공부한 내용
- x.compareto(y)의 경우 앞의 값과 대소를 비교하는 함수로 결과값에 따라 -1 , 0 ,1 을 반환한다.
- 기준 값이 비교 대상과 동일한 경우 0
- 기준 값이 비교 대상보다 작은 경우 -1
- 기잔 값이 비교 대상보다 큰 경우 1
- Integer.compare(x,y) 의 메소드를 사용하면 같은 값을 얻을 수 있다.
- stream.sorted()는 timSort방식으로 Insert Sort와 Merge Sort를 겹합한 알고리즘 이다.