179. Largest Number - python3

179. Largest Number

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.

My Answer 1: Wrong Answer (54 / 227 test cases passed.)

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 에 넣는 식으로 해보려 했는데..

너무 더러워지기만 해서 루션이 봤어요.

Solution 1: Runtime: 36 ms - 81.89% / Memory Usage: 14.4 MB - 31.76%

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_numx+y > y+x 이거대로 정렬이 쭉 된 값인가 봄

좋은 웹페이지 즐겨찾기