[코테 풀이] 특이한 정렬

시내·2023년 12월 28일
0

Q) 특이한 정렬

정수 n을 기준으로 n과 가까운 수부터 정렬하려고 합니다. 이때 n으로부터의 거리가 같다면 더 큰 수를 앞에 오도록 배치합니다. 정수가 담긴 배열 numlist와 정수 n이 주어질 때 numlist의 원소를 n으로부터 가까운 순서대로 정렬한 배열을 return하도록 solution 함수를 완성해주세요.

출처: https://school.programmers.co.kr/learn/courses/30/lessons/120880

import java.util.*;
class Solution {
    public int[] solution(int[] numlist, int n) {
        List<Integer> num = new ArrayList<>();
        List<Integer> minus = new ArrayList<>();
        List<Integer> res = new ArrayList<>();
        int min = 0;
        int min_ind = 0;
        
        for (int i : numlist) {
            num.add(i);
            minus.add(Math.abs(i - n));
        }
        while (!num.isEmpty()) {
            min = minus.get(0);
            min_ind = 0;
            for (int i = 1; i < minus.size(); i++) {
                if (min > minus.get(i)) {
                    min = minus.get(i);
                    min_ind = i;
                } else if (min == minus.get(i)) {
                    if (num.get(min_ind) > num.get(i)) {
                        min = minus.get(min_ind);
                    } else if (num.get(min_ind) < num.get(i)) {
                        min = minus.get(i);
                        min_ind = i;
                    }
                }
            }
            res.add(num.get(min_ind));
            num.remove(min_ind);
            minus.remove(min_ind);
        }
        int ind = 0;
        int[] answer = new int[res.size()];
        for(int i:res){
            answer[ind++] = i;
        }
        return answer;
    }
}

1) numlist에 들어있는 모든 숫자들을 num에 삽입한다.
2) minus라는 list에 num에 들어있는 모든 숫자들로부터 n을 뺀 절댓값을 삽입한다.
3) minus에서 가장 작은 값 자체와 그 값의 index를 구해서 각각 min과 min_ind에 저장한다. 만약 같은 숫자가 minus에 있다면더 큰 수를 min으로 설정한다.
4) res라는 리스트에 min값을 삽입한 뒤, num과 minus에서 해당 숫자를 제거한다.
5) res를 출력하면 끝!

profile
contact 📨 ksw08215@gmail.com

0개의 댓글