str으로 변환된 큰 수부터 정렬해서 str으로 리턴하였다. 틀려버렸다~
왜냐하면 [3, 30, 34, 5, 9]
와 같은 입력이 있을 때 큰 수부터 정렬하면 [9, 5, 34, 30, 3]
이 되어 9534303
이 되는데 이것은 최댓값이 아니다.
[3, 34, 30]
중 30
보다 앞에 나와야 하는 숫자가 3
이라는 것을 알기 위해서는 숫자를 3번 반복해보면 된다. 3번 반복하는 이유는 numbers의 원소는 0 이상 1,000 이하이기 때문이다. 만약 10,000 이하의 숫자라면 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)))