プログラマの最大数
大数
strに変換された大きな数から並べ替え、strを返します.間違っています~
入力が
str に変換長さに3倍を乗じ、大数から を並べ替える. joinをstrに変換し、intを加えると0000→0、1234→1234 となる.
私のやり方
strに変換された大きな数から並べ替え、strを返します.間違っています~
入力が
[3, 30, 34, 5, 9]
と同じである場合、大数から並べ替えると[9, 5, 34, 30, 3]
であり、9534303
であり、これは最低価格ではないからである.解き直す時。
[3, 34, 30]
の中で30
より前に現れるべき数字が3
であることを知るために、3回繰り返すことができます.3回繰り返すのはnumbersの要素が0以上1000以下であるためです.10000以下の数字であれば、4回繰り返すことができます.[3, 34, 30]
→ [333, 343434, 303030]
→ [343434, 333, 303030]
→ [34, 3, 30]
入力した数字の重複を考慮してdictのvalueをlistに設定してソートし,これより短いコードがある.from typing import OrderedDict
def solution(numbers):
big_number = ""
repeated_str_numbers = dict()
for num in numbers:
num = str(num)
if num not in repeated_str_numbers.keys():
repeated_str_numbers[num] = [str(num)*3]
else:
repeated_str_numbers[num].append(str(num)*3)
repeated_str_numbers = OrderedDict(
sorted(repeated_str_numbers.items(), key=lambda item: item[1], reverse=True))
for num, str_num in repeated_str_numbers.items():
for _ in range(len(str_num)):
big_number += num
if set(big_number) == {'0'}:
return "0"
return big_number
より簡潔なコード
def solution(numbers):
numbers = list(map(str, numbers))
numbers = sorted(numbers, key=lambda item: item*3, reverse=True)
return str(int(''.join(numbers)))
Reference
この問題について(プログラマの最大数), 我々は、より多くの情報をここで見つけました https://velog.io/@hotbreakb/programmers-가장-큰-수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol