[LeetCode] 179. Largest Number

yunanΒ·2021λ…„ 2μ›” 19일
0
post-thumbnail

πŸ”¦ 문제 링크

πŸ”Š 파이썬 μ•Œκ³ λ¦¬μ¦˜ 인터뷰 책을 μ°Έκ³ ν–ˆμŠ΅λ‹ˆλ‹€.

  • 문제

리슀트λ₯Ό μ •λ ¬ν•΄μ„œ κ°€μž₯ 큰수둜 λ§Œλ“€μ–΄ λ°˜ν™˜ν•˜μ„Έμš”.

✍️ 풀이


μ „ν˜•μ μΈ μ •λ ¬ λ¬Έμ œμ΄λ‚˜ ν•˜λ‚˜μ˜ ν‚€ κ°’μœΌλ‘œ μ†ŒνŒ…ν•˜λŠ” λ¬Έμ œκ°€ μ•„λ‹ˆμ˜€λ‹€.
μ–΄λ–€ ν‚€κ°’μœΌλ‘œ μ†ŒνŒ…μ„ 할지가 μ€‘μš”ν•œ 문제
μ—¬κΈ°μ„œ ν‚€ 값은 비ꡐ할 두 μ›μ†Œλ₯Ό λ”ν•œ κ°’μ΄μ˜€λ‹€

ex) 1. a + b, 2. b + a -> b + aκ°€ 더 크닀면 μŠ€μ™‘ν•΄μ€€λ‹€.

리턴 값을 str(int())둜 κ°μ‹Έμ£ΌλŠ” μ΄μœ λŠ” μž…λ ₯값이 [0, 0] 일 λ•Œ 00 이 μ•„λ‹Œ 0을 λ°˜ν™˜ν•˜κΈ° μœ„ν•œ μ²˜λ¦¬μ΄λ‹€.

πŸ›  μ½”λ“œ


class Solution:
    def largestNumber(self, nums: List[int]) -> str:
        def check_swap(a, b):
            return str(a) + str(b) < str(b) + str(a) # μŠ€μ™‘ ν•œ κ²½μš°κ°€ 더 큰 경우 (True λ°˜ν™˜)
        i = 1
        while i < len(nums):
            j = i
            while j > 0 and check_swap(nums[j - 1], nums[j]):
                nums[j - 1], nums[j] = nums[j], nums[j - 1]
                j -= 1
            i += 1
        return str(int(''.join(map(str,nums))))
        

πŸ“ 정리


숫자λ₯Ό 문자둜 λ§Œλ“œλŠ” 경우 항상 μ£Όμ˜ν•΄μ€˜μ•Ό ν•œλ‹€. (''.join() μ‚¬μš© μ‹œ 주의점)

🎈 참고


Book 링크

profile
Go Go

0개의 λŒ“κΈ€