C#

[프로그래머스 힌트/답/해석] 특이한 정렬

Guk-blog 2024. 1. 30. 16:03
728x90
반응형

힌트

더보기

- 절대값을 기준으로 정렬한 후 동일한 값이 존재한다면 더 큰 수를 앞으로 이동시킨다

- OrderBy는 오름차순 OrderByDescending은 내림차순

-TehnByDescending은 요소의 내림차순이다

정답

더보기

방법 1

return numlist.OrderBy(x=>Math.Abs(x-n)).ThenByDescending(x => x).ToArray();

방법 2

var list = numlist.OrderBy(x=>Math.Abs(x-n)).ToArray();

int[] gaplist = new int[numlist.Length];
for(int i = 0; i < numlist.Length; i++){
    numlist[i] = list[i];
    gaplist[i] = Math.Abs(list[i]-n);
}

for(int i = 0; i < numlist.Length; i++){
    for(int j=i+1; j < gaplist.Length; j++){
        if(gaplist[j]==gaplist[i] && numlist[j] > numlist[i]){
            int tempValue=numlist[j];
            numlist[j] = numlist[i];
            numlist[i]=tempValue;
        }
    }
}
Console.WriteLine(string.Join(",", numlist));
return numlist;

해석

더보기

 

방법 1은 힌트의 내용을 그대로 코드로 표현한 것이다.

 var list = numlist.OrderBy(x=>Math.Abs(x-n)).ToArray();

nullist의 수를 n과 뺀 절대값 오름차순으로 정렬한 값을 저장한다

int[] gaplist = new int[numlist.Length];
            for(int i = 0; i < numlist.Length; i++){
                numlist[i] = list[i];
                gaplist[i] = Math.Abs(list[i]-n);
            }

numlist에는 오름차순한 수를, gaplist에는 절대값을 저장한다

if(gaplist[j]==gaplist[i] && numlist[j] > numlist[i]){
                        int tempValue=numlist[j];
                        numlist[j] = numlist[i];
                        numlist[i]=tempValue;
                    }

 절대값이 같고 수가 nullist더 클 때(j는 1부터 시작 예) numlist[1]>numlist[0]) 순서를 바꾼다

 

728x90
반응형