[Python] 프로그래머스 120880

jinjoo-jung·2023년 8월 16일
0

CodingTest

목록 보기
7/9

문제 보러가기

문제 설명
정수 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이 있다면?

  • 절대값이 1로 동일하기 때문에 두번째 값(n-x)으로 비교해야함.
    6-5 = 1
    6-7 = -1
    으로, -1이 1보다 더 작으므로 7이 5보다 더 앞에 정렬이 된다.

시간복잡도, 공간복잡도 모두 O(n)
이때 n은 numlist의 길이
sorted 함수는 대개 입력 리스트와 같은 크기의 추가적인 공간을 사용하여 정렬을 수행

profile
개인 개발 공부, 정리용 🔗

1개의 댓글

comment-user-thumbnail
2023년 8월 16일

좋은 글이네요. 공유해주셔서 감사합니다.

답글 달기

관련 채용 정보