문제 설명
정수 n을 기준으로 n과 가까운 수부터 정렬하려고 합니다. 이때 n으로부터의 거리가 같다면 더 큰 수를 앞에 오도록 배치합니다. 정수가 담긴 배열 numlist와 정수 n이 주어질 때 numlist의 원소를 n으로부터 가까운 순서대로 정렬한 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
1 ≤ n ≤ 10,000
1 ≤ numlist의 원소 ≤ 10,000
1 ≤ numlist의 길이 ≤ 100
numlist는 중복된 원소를 갖지 않습니다.
풀이
def solution(numlist, n):
result = sorted(numlist, key=lambda x: (abs(x - n), n - x))
return result
1. sorted 함수를 사용하여 numlist를 정렬
numlist의 각 숫자를 n과의 차이의 절댓값과 n과의 차이에 따라 정렬한 결과를 반환하는 함수입니다.
2. key 함수를 사용하여 정렬 순서를 지정
key 함수의 인자로 들어가는 lambda 함수는 각 숫자 x에 대해 두 가지 값으로 비교합니다.
첫 번째 값: x와 n의 차이의 절댓값(abs(x - n))
두 번째 값: n에서 x를 뺀 값(n - x)
3. key 함수는 각 숫자 x에 대해 두 가지 기준으로 비교
numlist의 각 숫자를 먼저 n과의 차이의 절댓값을 기준으로 오름차순으로 정렬하고, 만약 차이의 절댓값이 같다면 n과의 차이를 기준으로 오름차순으로 더 정교하게 정렬됩니다.
ex) n이 6이고 list 값중에 5와 7이 있다면?
시간복잡도, 공간복잡도 모두 O(n)
이때 n은 numlist의 길이
sorted 함수는 대개 입력 리스트와 같은 크기의 추가적인 공간을 사용하여 정렬을 수행
좋은 글이네요. 공유해주셔서 감사합니다.