LeetCode 179. Largest Number(feat.__lt__)

단지·2024년 1월 17일
0

Python

목록 보기
3/3
post-thumbnail

풀이 코드

class compare(str):
    def __lt__(a, b):
        return a+b > b+a

class Solution:
    def largestNumber(self, nums: List[int]) -> str:
        if len(nums) == 1:
            return str(nums[0])
        elif len(nums) == 0:
            return ""
        else: 
            lst = [str(x) for x in nums]
            sorted_lst = sorted(lst, key=compare)
            
            if list(set(sorted_lst)) == ['0']:
                sorted_lst = ['0']
                
        return ''.join(sorted_lst)

파이썬에서 __lt__ 메서드는
클래스가 비교 연산자(less than)를 정의하기 위해 사용되는 특수한 메서드이다.
이 메서드를 정의하면 해당 클래스의 객체 간에 '<' 연산자를 사용할 수 있게 된다.

__lt__ 메서드는 두 개의 인자를 받아야 한다.
첫번째 인자는 비교 대상 객체 자체이고,
두번째 인자는 비교할 대상이다.
메서드의 반환 값은 두 객체를 비교한 결과를 나타내고,
일반적으로 True 혹은 False를 반환한다.

__lt__ 메서드를 사용하기 위해서는 해당 메서드가 정의되어있는 클래스에서 상속받아야 한다.
str을 상속받은 compare 클래스를 선언해 준 다음, __lt__메서드를 정의해 주었다.
그런데 str은 단일인자이고 함수는 a와 b 인자를 필요로 하는데 어떻게 연산이 가능한 걸까?

파이썬은 덕 타이핑이라는 특징을 가진다.
덕 타이핑이란 실제 타입이나 상속관계 보다는
객체의 속성이나 메서드의 존재가 객체의 적합성을 결정하는 프로그래밍 스타일이다.
__lt__ 메서드는 str클래스를 상속받은 compare 클래스 내에 위치하기 때문에
str클래스에서 정의중인 __lt__ 클래스를 사용하는 것이다
a와 b인자를 이용해 연산을 수행하는 것이 아니라
내부에서 단일인자 self를 통해 self와 other 객체간 연산이 수행되어 가능하다.

profile
'-'b

0개의 댓글