Given a list of non-negative integers nums, arrange them such that they form the largest number.
Note: The result may be very large, so you need to return a string instead of an integer.
class Solution:
def largestNumber(self, nums: List[int]) -> str:
if len(nums) == 1:
return str(nums[0])
result = ""
order = []
# 정렬
for i in range(len(nums)):
num = int(str(nums[i])[0])
for j in range(i+1, len(nums)):
num2 = int(str(nums[j])[0])
if num > num2:
nums[i], nums[j] = nums[i], nums[j]
for i in range(len(nums)-1, -1, -1):
if nums[i] == -1:
continue
num = str(nums[i])
turn = 0
for j in range(i-1, -1, -1):
print(nums[i], nums[j])
num2 = str(nums[j])
if nums[j] == -1:
continue
elif num[0] != num2[0]:
result += str(nums[i])
nums[i] = -1
break
else:
if num[-1] > num2[-1]:
turn = 1
else:
result += str(nums[j])
nums[j] = -1
if turn:
result += str(nums[i])
nums[i] = -1
for num in nums:
if num > -1:
result += str(num)
print(nums)
return result
맨 앞자리 값을 기준으로 정렬한 후 맨 뒤부터 result 에 넣는 식으로 해보려 했는데..
너무 더러워지기만 해서 루션이 봤어요.
class LargerNumKey(str):
def __lt__(x, y):
return x+y > y+x
class Solution:
def largestNumber(self, nums: List[int]) -> str:
largest_num = ''.join(sorted(map(str, nums), key=LargerNumKey))
return '0' if largest_num[0] == '0' else largest_num
초간단이라 놀랬네요^^; 완전 이해는 안된다는 점~...
LargerNumKey
라는 클래스를 만들어줘서...
근데 왜 x+y
를 이용하는거지...??
largest_num
은 x+y > y+x
이거대로 정렬이 쭉 된 값인가 봄