프로그래머스/파이썬_입문

특이한 정렬

싱싱한복초이 2025. 1. 8. 17:38

https://school.programmers.co.kr/learn/courses/30/lessons/120880

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

[문제 설명]

정수 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):
    aa = []
    for i in numlist:
        aa.append(i-n)
    
    aa.sort(key=lambda x: abs(x))
    
    for j in aa:
        aa.append(j+n)
        
    return aa

실행시간이 10초를 초과해 실패..

 

(올바른 풀이)

def solution(numlist, n):
    sorted_list = sorted(numlist, key=lambda x: (abs(x - n), -x))
    return sorted_list

혹은

def solution(numlist, n):
    numlist.sort(key=lambda x: (abs(x-n), -x))
    return numlist

 

[다른 풀이]

def solution(numlist, n):
    # num -> (abs(n-num), -num)
    numlist = [(abs(n-num), -num) for num in numlist]
    # 첫 번째 요소를 기준으로 오름차순 정렬 and 두 번째 요소를 기준으로 내림차순 정렬
    numlist.sort()
    # 두 번쨰 요소만 반환
    return [-num for _, num in numlist]

'프로그래머스 > 파이썬_입문' 카테고리의 다른 글

옹알이 (1) + 정규표현식  (0) 2025.01.10
등수 매기기  (0) 2025.01.09
💫겹치는 선분의 길이 + 스위핑  (0) 2025.01.07
💫유한소수 판별하기  (0) 2025.01.06
💫평행  (0) 2025.01.05