728x90
정렬
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
comparator 이건 JS에서도 비슷하게 했던걸로 기억 (sort에서 arrow function으로)
cmp_to_key는 처음보는 함수
python2 에서 사용되었다고 나옴 docs.python.org/ko/3/howto/sorting.html?highlight=sorting#key-functions
사용자의 함수를 key함수의 인자로 사용할때 사용됨
def solution(numbers):
numbers = list(map(str, numbers))
numbers.sort(key=lambda x: x*3, reverse=True)
return str(int(''.join(numbers)))
1000 이하이므로 3자리수로 맞춘 뒤, 비교
x*3으로 할 경우
['666', '101010', '222'] 로 변환되고
정렬하면
['666', '222', '101010']
이렇게 되는데 이건 기존 list를 변환하지 않는 것이기 때문에
최종 정렬후 결과는
['6','2,','10']
이렇게 된다.
숫자가 아닌 문자열을 숫자처럼 정렬 하는 것을 이용.
출처:
728x90
'Algorithm' 카테고리의 다른 글
[프로그래머스] H-index 파이썬 (0) | 2021.03.11 |
---|---|
[프로그래머스] 전화번호 목록 파이썬 Hash (0) | 2021.03.11 |
[프로그래머스] 소수 찾기 파이썬 (0) | 2021.03.10 |
[Python] Heap (0) | 2021.03.10 |
[프로그래머스] 조이스틱 (0) | 2021.03.05 |
댓글