プログラマのソート-最大数



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

問題の説明


0または正の整数を指定すると、最大の整数を見つけます.
例えば、与えられた整数が[6,10,2]である場合、最大数が6210である[610261010621026102106]を作成することができる.
パラメータに指定された配列番号が0または正の整数の場合、作成可能な最大番号を文字列に変換して戻すソリューション関数を作成します.

せいげんじょうけん

  • numbersの長さは100000より大きい.
  • numbersの要素は1000を超えません.
  • 答えが大きすぎるかもしれませんが、文字列を変えて返してください.
  • に答える


    最初は配列ですべての数列を求め、最大値を抜きます
    答えは正しいが、タイムアウトが発生した.
    だからソートの問題だと思っています.
    [3,30,34,5,9]の例では、文字列でソートします.
    9 5 34 30 3になるかどうか.
    どうしようかと悩んだあげく、とうとう結果が出た.
    文字列ごとに何回か乗じて解決する斬新な方法を見つけた.
    各文字に5回乗算します.
    99999
    55555
    3434343434
    3030303030
    33333
    になる
    これに基づいて、文字列を逆順に並べます.
    9 5 34 3 30
    いいですよ.
    def solution(numbers):
        arr = sorted(list(map(str, numbers)), key=lambda x: x*5, reverse=True)
        # ''.join(arr) 원래 여기 까지만 해주면 되나 [0,0,0,0] 들어올시를 대비해
        answer = str(int(''.join(arr)))
        return answer
    简単な问题ですが、时间がかかりすぎて、问题を解决できません.ううう