C#/프로그래머스 코딩 문제 풀이

[프로그래머스 C#] Lv.0 특이한 정렬

ForMan_ 2024. 1. 12. 22:48

1. 문제

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

2. 제한사항

● 1 ≤ n ≤ 10,000
● 1 ≤ numlist의 원소 ≤ 10,000
● 1 ≤ numlist의 길이 ≤ 100
● numlist는 중복된 원소를 갖지 않습니다.

3. 입출력 예시

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]

4. 나의 풀이

public int[] solution(int[] numlist, int n)
{
	int[] answer = new int[numlist.Length];
    
    answer = numlist.OrderBy(x => Math.Abs(n - x)).ThenByDescending(x => x).ToArray();
    
    return answer;
}

// System.Linq; 써줘야 가능한 코드입니다.

// Math.Abs = Math클래스의 Abs, 절댓값을 만들어주는 매서드입니다.

// OrderBy = 오름차순.

// ThenByDescending = 앞에 OrderBy로 오름차순을 진행한 값 기점으로 내림차순.

 

 

 

 

 

 

 

♥ 저 코드 자체를 모른다는 분들을 위한 세상 친절한 설명!!

-입출력 예시 1번을 가지고 설명을 간단히 해드리겠습니다.

1. 현재 괄호속에 있는 x는 numlist의 원소 값들입니다. [1,2,3,4,5,6]

2. 그 아이들을 대충 만든 것처럼 보이는 화살표 모양으로 Math.Abs(n-x)에 넣어주어 절댓값을 출력해줍니다.

3. 그 절댓값을 가지고 Order바이! 오름차순을 진행해줍니다. 이렇게 나오겠죠. [0,1,1,2,2,3] 이 배열의 이름을 귀찮으니까.. 오더바이의 배열.. 줄여서 오빠라고 하겠습니다. 예 그냥 그러려니 하세요.

4. 암튼 이 오빠를 기준으로 Then머시기를 해줄겁니다. 이 때 Then머시기는 x => x로 되어있습니다. 위에서 말했다시피 x는 numlist의 원소 값들입니다.

5. 자 여기서 포인트! 오빠에서 1과1, 2와2는 육안으로 봤을 때 뭐가 어디서 왔는지 알 수가 없죠? 근데 순서에 힌트가 있답니다. numlist 원소들 중 앞에서부터 OrderBy를 진행했다는 거죠. 그러니 앞에 있는게 3 그리고 5. 2 그리고 6이 되는 거랍니다. 

6. 이 데이터베이스를 가지고 내림차순을 진행해준 값이 answer가 되는 겁니다. 참 쉽죠? 전 어려웠답니다ㅎㅎ