본문 바로가기
JAVA/프로그래머스

[Lv.0] 프로그래머스 - 특이한 정렬 : Java

by ♡˖GYURI˖♡ 2024. 6. 19.
 

프로그래머스

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

programmers.co.kr

 

 

 

이해하기

numlist의 각 수와 n과의 거리를 계산하여 따로 int 배열에 저장하고, 이를 등수 매기듯 정렬하는 방법을 생각했지만 구현하지 못했다.

 

예시를 가지고 정리하면 왼쪽과 같다.

거리를 따지는 것이니 n과의 차이를 절대값으로 나타냈다.

만약 거리가 같다면 더 큰 수가 앞으로 오도록 한다.

그렇기에 결과가 {4, 5, 3, 6, 2, 1}이 되어야 하는 것이다.

 

 

 

첫번째 인덱스를 가지고 비교해보자. 거리가 3인 1보다 거리가 먼 값은 없으니 그대로 {1, 2, 3, 4, 5, 6}이다.

 

두번째 인덱스를 가지고 비교해보자. 두번째 인덱스의 값은 2이고 거리는 2이다. 1보다 거리가 가까운 값 2가 1과 자리를 바꾸어 {2, 1, 3, 4, 5, 6}이 된다.

 

세번째 인덱스를 가지고 비교해보자. 세번째 인덱스의 값은 3이고 거리는 1이다. 2보다 거리가 가까운 3이 2와 자리를 바꾸어 {3, 1, 2, 4, 5, 6}이 된다. 이 때 세번째 인덱스의 값은 2로 바뀌었고, 1보다 거리가 가까운 2가 1과 자리를 바꾸어 {3, 2, 1, 4, 5, 6}이 된다.

 

 

네번째 인덱스를 가지고 비교해보자. 네번째 인덱스의 값은 4이고 거리는 0이다. 3보다 거리가 가까운 4가 3과 자리를 바꾸어 {4, 2, 1, 3, 5, 6}이 된다. 이 때 네번째 인덱스 값은 3으로 바뀌었고, 2보다 거리가 가까운 3이 2와 자리를 바꾸어 {4, 3, 1, 2, 5, 6}이 된다. 이제 네번째 인덱스 값은 2가 되었고, 1보다 거리가 가까운 2가 1과 자리를 바꾸어 {4, 3, 2, 1, 5, 6}이 된다.

 

 

다섯번째 인덱스를 가지고 비교해보자. 다섯번째 인덱스의 값은 5이고 거리는 1이다. 3과 5는 거리가 같지만 더 큰 수인 5가 앞으로 이동해야 하니 {4, 5, 2, 1, 3, 6}이 된다. 이 때 다섯번째 인덱스 값은 3이 되었고, 2보다 거리가 가까운 3이 2와 자리를 바꾸어 {4, 5, 3, 1, 2, 6}이 된다. 이제 다섯번째 인덱스 값은 2가 되었고, 1보다 거리가 가까운 2가 1과 자리를 바꾸어 {4, 5, 3, 2, 1, 6}이 된다.

 

 

마지막으로 여섯번째 인덱스를 가지고 비교해보자. 여섯번째 인덱스의 값은 6이고 거리는 2이다. 2와 6은 거리가 같지만 더 큰 수인 6이 앞으로 이동해야 하니 {4, 5, 3, 6, 1, 2}가 된다. 이 때 여섯번째 인덱스의 값은 2이 되었고, 1보다 거리가 가까운 2가 1과 자리를 바꾸어 {4, 5, 3, 6, 2, 1}이 된다.

 

이를 코드로 구현하면 이중 for문 형태가 된다.

 

 

문제풀이

import java.util.*;

class Solution {
    public int[] solution(int[] numlist, int n) {
        Arrays.sort(numlist);
        
        for (int i = 0; i < numlist.length; i++) {
            for (int j = 0; j < numlist.length; j++) {
                if (Math.abs(numlist[i] - n) <= Math.abs(numlist[j] - n)) {
                    int temp = numlist[i];
                    numlist[i] = numlist[j];
                    numlist[j] = temp;
                }
                System.out.println(Arrays.toString(numlist));
            }
        }
        
        return numlist;
    }
}