[python_파이썬_pass]프로그래머스_LV0_특이한 정렬_풀이

2024. 5. 17. 12:07코드리뷰

728x90
반응형

공부하는허딩크 : https://www.youtube.com/live/d04PXaSTIlQ?feature=shared

중점적으로 생각해야 할 부분은 2가지로 생각했다.

첫번째는 주어진 n과의 차이.

두번째는 차이를 기본으로 한 기존 numlist의 숫자들의 크기이다.

 

이 2가지를 고려했을때 생각난 방법은 배열이다. 처음 빈 리스트를 만들고 그 안에 numlist의 숫자와 n과의 차이를

각각 추가하고, 2가지 모두 sort를 걸어주면 답이 나오겠다고 생각했다.

 

<첫번째 시도 : 통과>

이번에는 lambda를 이용해서 1번index에 접근해서 sort를 적용했다.

지난번 백준에서 풀었던 배열 문제중에 같은 배열에 기준이 다른 sort를 각각 걸어주면 첫번째 효과는 유지한채 두번째 효과가 적용되는걸 볼 수 있었다.

#배열로 숫자와 거리를 [0, 0]에 넣고 sort활용
def solution(numlist, n):
    temp = [[0, 0] for _ in range(len(numlist))]
    answer = []
   
    for index, i in enumerate(numlist):
        temp[index][0] = i
        temp[index][1] = abs(n - i)
   
    temp.sort(reverse=True)
    temp.sort(key=lambda x: x[1])
   
    for i, j in temp:
        answer.append(i)
   
    return answer

 

<다른사람 풀이 참고>

한줄코드 : 어차피 sorted안에 key로 차순 조건을 설정할 수 있음

 즉, 눈에 보이지는 않아도 key에 함수를 abs(n-x)를 걸어주면 차이가 작은 순서대로 numlist가 오름차순으로 조정됨.

단, abs(n - x)가 값이 같을 경우 뒤에 기준을 적용해서 차순이 적용됨.

즉, n = 4일때 3과 5의 차이는 절대값 1임. 차이가 동일할 경우 큰수부터 나열하는 것이 기준임으로 5가 먼저 나와야 하는데 sort의 기본 배열은 오름 차순임으로 n - x를 해서 4 - 5 = -1, 4 - 3 = 1이라서 -1이 더 작은 수 임으로 5가 먼저 나오게됨.

ㄴ 내 머리속에도 아래의 함수는 있는데 실전에서 손가락이 이렇게 움직이지 않네.

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

 

추가로 (n - x)기준 말고 -x를 기준으로 해도 -5, -3 이렇게 비교가 됨으로 5부터 나옴.

numlist.sort(key = lambda x: (abs(n - x), -x))로도 가능함.

728x90
반응형