고양이와 코딩

[프로그래머스] 10월 18일 ~ 본문

python

[프로그래머스] 10월 18일 ~

ovovvvvv 2023. 10. 19. 00:04
728x90

10월 18일

문제

 

나의 풀이

def solution(numlist, n):
    distance_value = []
    answer = []
    
    # 거리와 원본 값 튜플을 리스트에 추가 계산하여 distance 리스트에 추가
    for i in numlist:
        distance = abs(i - n)
        distance_value.append((distance, i))
        
    # 거리가 같으면 더 큰 값을 앞에 두도록 정렬
    distance_value.sort(key = lambda x : (x[0], -x[1]))
    
    answer = [x[1] for x in distance_value]
    
    return answer

조건부 정렬이라 lambda를 써야겠다는 생각을 했다..

distance_value에 [(3,1),(2,2) ......] 의 형태로 n과의 거리와 기존 값을 저장하고

lambda x : ( x[0], -x[1]))로 distance_value를 정렬한다.

 

x[0]으로 거리를 오름차순으로 정렬하고, 거리가 같은 경우에 -x[1]로 기존 값이 더 큰걸 먼저 정렬하게 한다!!
→ 이 부분이 잘 이해가 안가서 지피티한테 도움을 요청했다..

예를들어 distance_value 리스트가 [(1, 5), (1, -3), (1, 2), (1, -1)] 일때 x[1]로 정렬을 수행한다면

[(1, -3), (1, -1), (1, 2), (1, 5)] 이렇게 정렬이 되고,

-x[1]로 정렬하면 [(1, 5), (1, 2), (1, -3), (1, -1)] 이렇게 된다!!
아니 나는 이 마이너스 부호에 너무 집착해서 뭔소리지??? 부호가 바뀐다고?? 하면서 계속 삽질을 했고

마이너스에 대한 나의 집착에 gpt도 홀란스러워졌는지,.. 자꾸만 헛소리를 했다.

 

그래서 내린 결론은 기존에 오름차순으로 정렬되던걸 그냥 내림차순으로!! 정렬 순서를 역순으로 바꾸는건가? 

생각했다...