[프로그래머스] 특이한 정렬 자바(Java)
본문 바로가기
알고리즘 풀이

[프로그래머스] 특이한 정렬 자바(Java)

by IYK2h 2023. 3. 7.
728x90

프로그래머스 - 특이한 정렬

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이

  1. 정렬 기준을 바꿔기
    n을 기준으로 가까운 수 -> 각각 숫자에서 n을 뺀 절댓값
  2. 절댓갑 기준(값의 차이) 내림차순 정렬 후 오름차순 정렬
    - 문제에서 거리가 같은 경우 큰수가 앞으로 와야하는 조건 때문

상세 설명은 코드 주석 참고

코드

import java.util.*;

class Solution {
    public int[] solution(int[] numlist, int n) {
        // 정수 리스트를 저장할 어레이리스트 생성
        List<Integer> numList = new ArrayList<>();

        // numList 추가
        for (int num : numlist) {
            numList.add(num);
        }

        // numList 정렬
        Collections.sort(numList);

        // numList 정렬 기준 변경 : n과의 차이의 절대값으로 기준
        // 차이가 큰 순으로 내림차순 ->  문제에서 거리가 같은 경우 큰수가 앞으로 와야하는 조건 때문
        // 뒤에서 역순으로 정렬할 에정
        numList.sort(Comparator.comparingInt(s -> -(Math.abs(s - n))));

        // 역순으로 정렬
        Collections.reverse(numList);

        // 정렬된 numList 어레이리스트를 int 배열로 변환하여 반환
        return numList.stream().mapToInt(i -> i).toArray();
    }
}
728x90

댓글