[프로그래머스][파이썬] 특이한 정렬 - 정렬 (Level 0)

뻥튀기아이스크림·2025년 4월 1일
1
post-thumbnail

◽ 문제 출처

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

◽ 문제

◽ 입력 & 출력

◽ 내 풀이

def solution(numlist, n):
    temp = []

    for num in numlist:
        distance = abs(num - n)
        temp.append([distance, -num])
        
    for i in range(len(temp)):
        for j in range(i + 1, len(temp)):
            if temp[i] > temp[j]:
                temp[i], temp[j] = temp[j], temp[i]
                
    answer = []
    for dist, neg_num in temp:
        answer.append(-neg_num)
        
    return answer
  • 각 숫자와 n 과의 거리를 temp 리스트에 저장한다.
  • temp 리스트를 거리 기준과 큰 수를 우선으로 정렬한다.
  • 정렬되었으면 원래 숫자로 복원해서 반환한다.

◽ 다른 사람 풀이

def solution(numlist, n):
    return sorted(numlist, key = lambda x: (abs(x - n), -x))
  • sorted() 함수에 람다를 이용하여 정렬 기준을 바로 바꿨다.

◽ 더 나아가기

  • 정렬의 기준을 거리 기준 오름차순, 숫자는 내림차순으로 바꿔야하는 문제였다.
  • -num 이면 큰 수가 먼저 올까? 처음엔 이방식을 몰라 한참을 헤맸다.
  • 파이썬에서 리스트 정렬은 [a, b] < [c, d] 식으로 먼저 첫 요소 (a vs c) 를 비교, 같으면 두 번째 요소 (b vs d) 를 비교한다.
  • 그대로 num 을 추가하게 되면 작은 값이 앞으로 오게 된다.
  • 큰 수를 먼저 오게 하려면 음수로 만들어 작게 보이게 해야한다.
  • -num"큰 수 우선 정렬"을 가능하게 하는 아주 흔한 테크닉이라고 하니 명심하자.



피드백은 언제나 환영입니다 :)

profile
성장하고 싶은 개발자

0개의 댓글