본문 바로가기

프로그래머스/lv0

특이한 정렬

/* 특이한 정렬
 * 정수 n을 기준으로 n과 가까운 수부터 정렬하려고 합니다.
 * 이때 n으로부터의 거리가 같다면 더 큰 수를 앞에 오도록 배치합니다.
 * 정수가 담긴 배열 numlist와 정수 n이 주어질 때
 * numlist의 원소를 n으로부터 가까운 순서대로 정렬한 배열을 return
 *
 * numlist                          n   result
 * [1, 2, 3, 4, 5, 6]               4   [4, 5, 3, 6, 2, 1]
 * [10000,20,36,47,40,6,10,7000]    30  [36, 40, 20, 47, 10, 6, 7000, 10000]
 */
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import java.math.*;
import java.util.*;
public class programmer_0_90 {
    static int[] a1 = {123456};               static int b1 = 4;
    static int[] a2 = {10000,20,36,47,40,6,10,7000};    static int b2 = 30;
 
    public int[][] getOrdr(int[] numlist, int n) {
        int[][] ar = new int[numlist.length][2];
        
        for(int i = 0; i < ar.length; i++){
            for(int k = 0; k < 2; k++){
                ar[i][0= numlist[i];
                ar[i][1= Math.abs(numlist[i] - n);
            }
        }
        Arrays.sort(ar, (o1, o2) -> {
            if(o1[0== o2[0]){
                return Integer.compare(o1[1], o2[1]);
            }
            else return Integer.compare(o1[1], o2[1]);
        });
        for(int i = 0; i < ar.length; i++){
            for(int k = 0; k < 2; k++){
                if(i < ar.length-1 && ar[i][1== ar[i+1][1]){
                    if(ar[i][0< ar[i+1][0]){
                        int imsi = ar[i][0];
                        ar[i][0= ar[i+1][0];
                        ar[i+1][0= imsi;
                    }
                }
            }
        }
        return ar;
    }
    public int[] solution(int[] numlist, int n) {
        int[] answer = new int[numlist.length];
        int[][] ar = getOrdr(numlist, n);
        for(int i = 0; i < ar.length; i++){
            answer[i] = ar[i][0];
        }
        for(int i : answer) System.out.print(i+",");
        System.out.println("");
        return answer;
    }
    public static void main(String args[]){
        programmer_0_90 t = new programmer_0_90();
        System.out.println("---------------------------------------");
        System.out.println("result = " + t.solution(a1,b1));
        System.out.println("---------------------------------------");
        System.out.println("result2 = " + t.solution(a2,b2));
        System.out.println("---------------------------------------");
    }
}
cs

'프로그래머스 > lv0' 카테고리의 다른 글

안전지대  (1) 2022.12.07
저주의 숫자 3  (0) 2022.12.07
유한소수 판별하기  (0) 2022.12.07
직사각형의 넓이  (1) 2022.12.07
컨트롤 제트  (0) 2022.12.07