https://leetcode.com/problems/largest-number/

 

Largest Number - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com


풀이 과정

여러 숫자를 앞뒤로 이어 붙여 가장 큰 숫자를 만드는 문제이다.

 

위의 예시에서 보이듯 3, 30, 34, 5, 9의 숫자 모음은 9, 5, 34, 3, 30 순으로 붙여야 가장 큰 수로 만들 수 있다. 커스텀 비교 연산자를 하나 선언해서 문제를 해결할 수 있다. 원래의 비교에 따르면 3과 30을 비교하면 30이 더 큰 숫자이고 34와 5를 비교하면 34가 더 큰 숫자이다. 하지만 이 문제를 해결하기 위해서는 str(x) + str(y) > str(y) + str(x)일때 참을 출력하는 커스텀 비교 연산자를 하나 만들어주어야 한다.

 

그러면 3과 30은 330 > 303이므로 3이 더 큰 것으로 처리되고 34와 5는 345 < 534이므로 5가 더 큰 것으로 처리될 것이다. 이와 같이 처리해야 문제의 조건을 만족할 수 있다.


소스 코드

class to_swap(str):
    def __lt__(x, y):
        return x+y > y+x

class Solution:
    def largestNumber(self, nums: List[int]) -> str:
        nums = [str(i) for i in nums]
        nums.sort(key=to_swap)
        return str(int(''.join(map(str, nums))))

 

+ Recent posts