본문 바로가기
개발/문제풀이

프로그래머스 '특이한 정렬' 파이썬 풀이

by beomcoder 2023. 2. 16.
728x90
반응형
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

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

def solution(numlist, n):
    rank = sorted([[value, distance:=abs(value-n)] for value in numlist], key = lambda x: (x[1],-x[0]))
    return [v[0] for v in rank]
    
 """
 풀고 나서 다른 풀이를 보니 처리를 덜해도 되는 것 같다.
 우선 내가 푼 방식을 단계별로 풀이해보면
 
 1) [[value, distance:=abs(value-n)] for value in numlist]
 
 numlist에서 value를 하나씩 가지고 와서 [value, distance]로 표현한다.
 n이 3, value가 3이라면 [0, 0 (3-3)]이 된다.
 
 2) sorted( '1)에서 나온 리스트', key = lambda x: (x[1],-x[0]))
 
 이건 sort하는 방식이다. 보통 key = lambda x : 로 사용한다.
 (x[1], -x[0])의 뜻은 먼저 x[1]을 기준으로 소트한다.
 만약 x[1]이 같은 값이라면 그 다음 -x[0]을 기준으로 소트한다.
 +와 -는 오름차순과 내림차순을 생각하면 된다.
 
 3) return [v[0] for v in rank]
 
 2번으로 소트를 하고 나면 거리순, value값으로 소트가 된다.
 그러면 이제 차례대로 value를 가지고 리턴해주면 된다.
 """
728x90
반응형

댓글