[Programmers 42746]最大数(Python)


質問する


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

これは,与えられた整数を最大数に組み合わせる問題である.
今は2級しか調整していません.私は調整しました.やばい

問題を解く


[答えが間違っている]
ランダで数字の最初の桁数を比較できると思います.
では、9, 8, 7, 12 ... はこのように整理されるはずです.
欲しい結果が出たが、間違った答えだった.
numbers = list(map(str, numbers))
    numbers = (sorted(numbers, key=lambda x: x[0], reverse=True))
[例外]20, 203の正解は20320だったが、20203が現れた.
最初の位置だけを比較したので、こんな結果になりました.
[間違った答え2]
では最後の位置も比較してみましょうか?考えて、ほほほ、
以上の例外は解決できるが、もちろん間違っている.
[例外]4223, 4991のように、1位、最下位は比較できるが、中間の位置は比較できないため、誤った答えが出た.
[正解]
だから長い間悩んで、やっと答えを見つけた.
儒林のブログ。では、非数値文字列を1番目のビットとして比較し、文字長に基づいて比較する.
  • 26, 13, 3, 1という名前の数字については、各文字にランダムに5回の値を乗算してキーとしてソートします.
    66666, 1313131313, 33333, 11111
  • に示すように、
    (第一位比較)👉🏻 (文字列の長さ).
  • したがって、
  • の順に並べられます.
  • コード#コード#

    def solution(numbers):
        answer = ''
        numbers = list(map(str, numbers))
        numbers = (sorted(numbers, key=lambda x: x * 5, reverse=True))
    
        for n in numbers:
            answer += str(n)
        return str(int(answer))