[レベル2]最大数


🛠 質問する


https://programmers.co.kr/learn/courses/30/lessons/42746

👩🏻‍💻 解決策


numbersの要素は1000以下なので、3桁のペア(x*3)で比較すれば問題解決
文字列比較はアスキー値で置換ソートされるので、大数から降順にソートされます
intに変換してstrを再strするのは、すべての値が0の場合に処理するためです(000)
ソースコード
def solution(numbers):
    numbers = list(map(str, numbers))
    numbers.sort(key = lambda x:x*3, reverse=True)
    answer = str(int(''.join(numbers)))
    
    return answer

💡 他人の解答


functools.cmp to key(func):旧式比較関数をキー関数に変換する
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