[python]functools.cmp_to_key

건너별·2021년 12월 10일
0

python

목록 보기
4/12

문제

[(0, 4), (1, 2), (1, -1), (2, 2), (3, 3)]

위와 같은 tuple을 포함한 리스트를

1) y좌표 오름차순

2) y좌표 같다면 x좌표 오름차순

으로 정리해 보자.

아래와 같은 결과가 예상된다.

[(1, -1), (1, 2), (2, 2), (3, 3), (0, 4)]

방법 1. lambda 소환

  • 간단하지만, 하나는 오름차순, 하나는 내림차순 이런식으로는 한계가 있음.
l1 = [(0, 4), (1, 2), (1, -1), (2, 2), (3, 3)]
l2 = sorted(l1, key =lambda x : (x[1],x[0]))

print(l2)

>>> [(1, -1), (1, 2), (2, 2), (3, 3), (0, 4)]

방법2. functools.cmp_to_key 활용

  • comparator 함수를 정의하고, 순서에 따라 1 0 1 로 나오도록 설계
  • key에 아래와 같이 key=functools.cmp_to_key(comparator) 로 넣는다.

import functools

def comparator(a,b):
    t1 = a+b
    t2 = b+a
    return (int(t1) > int(t2)) - (int(t1) < int(t2)) #  t1이 크다면 1  // t2가 크다면 -1  //  같으면 0

def solution(numbers):
    n = [str(x) for x in numbers]
    n = sorted(n, key=functools.cmp_to_key(comparator),reverse=True)
    answer = str(int(''.join(n)))
    return answer
    
>>> [(1, -1), (1, 2), (2, 2), (3, 3), (0, 4)]

Reference

profile
romantic ai developer

0개의 댓글