특이한 정렬

문제


나의 생각

해당 문제는 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를 겹합한 알고리즘 이다.

 

 

'Programmers 문제풀이 > Lv.0' 카테고리의 다른 글

안전지대  (0) 2023.03.12
연속된 수의 합  (0) 2023.03.12
다항식 더하기  (0) 2023.03.12
저주의 숫자 3  (0) 2023.03.11
유한소수 판별하기  (0) 2023.03.10