๐๋ฌธ์
https://leetcode.com/problems/largest-number/description/
๐์ด๋ค ์๊ณ ๋ฆฌ์ฆ?
์ ๋ ฌ
1. ์ฒ์์ permutation์ผ๋ก ๊ฐ๋ฅํ ๋ชจ๋ ์กฐํฉ์ ์ฐพ์์ ํ๋ ค ํ๋๋ฐ ํ์คํ ์์ด์ ๊ฐ์๊ฐ 10๋ง ๋์ด๊ฐ๋ ์๊ฐ์ด๊ณผ๊ฐ ๋๊ธฐ ์ฝ๋ค.
2. cmp_to_key๋ฅผ ํ์ฉํ ํ์ด
cmp_to_key()์ ๋ํ ์ค๋ช
from functools import cmp_to_key
def compare(a,b):
if a > b:
return 1
elif a == b:
return 0
elif a < b:
return -1
lst = [1,3,2]
lst = sorted(lst, key=cmp_to_key(compare))
print(lst)
# ๊ฒฐ๊ณผ : [1,2,3]
- cmp_to_key๋ -1,0,1์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋๋ค.(๋ฐ๋ผ์ compare๋ -1,0,1์ ๋ฐํํด์ผํ๋ค.)
- 1 : ์ฒซ๋ฒ์งธ ๊ฐ(a)๊ฐ ๋๋ฒ์งธ ๊ฐ(b) ๋ณด๋ค ํผ์ ์๋ฏธํ๋ค. ์ฆ, ์ ๋ ฌํ ๋, a๊ฐ b๋ณด๋ค ์์ ์์ผํ ๋ 1์ return ํ๋ค.
- 0 : ์ฒซ๋ฒ์งธ ๊ฐ(a)๊ฐ ๋๋ฒ์งธ ๊ฐ(b)์ ๊ฐ์์ ์๋ฏธํ๋ค. ์ฆ, ์ ๋ ฌํ ๋, a์ b๊ฐ ๊ฐ์ ์์น์ ๊ทธ๋๋ก ์์ด์ผ ํ ๋ 0์ returnํ๋ค.
- -1 : ์ฒซ๋ฒ์งธ ๊ฐ(a)๊ฐ ๋๋ฒ์งธ ๊ฐ(b)๋ณด๋ค ์์์ ์๋ฏธํ๋ค. ์ฆ, ์ ๋ ฌํ ๋, a๊ฐ b๋ณด๋ค ๋ค์ ์์ผํ ๋ -1์ return ํ๋ค.
- ๊ฒฐ๋ก : a,b ๋น๊ตํ ๋ ์์ ๋ฐ๊ฟ์ผ๋๋ฉด 1, ์์ ์๋ฐ๊ฟ๋ ๋๋ฉด -1 return
- a < b ์ผ ๋, ์์๋ฅผ ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด return 1
- 3 < 1 ์ผ ๋, ์์๋ฅผ ๋ฐ๊พผ๋ค๋ฉด ์ ๋ ฌ์ [3,2,1] ์์๊ฐ ๋จ
- a < b ์ผ ๋, ์์๋ฅผ ๋ฐ๊พธ๊ณ ์ถ์ง ์๋ค๋ฉด return -1
- 3 < 1 ์ผ ๋, ์์๋ฅผ ๋ฐ๊พธ์ง ์์ผ๋ฉด ์ ๋ ฌ์ [1,2,3] ์์๊ฐ ๋จ
- a < b ์ผ ๋, ์์๋ฅผ ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด return 1
๐ป cmp_to_key()๋ฅผ ํ์ฉํ ์ ๋ต ์ฝ๋
from functools import cmp_to_key
class Solution:
def largestNumber(self, nums: List[int]) -> str:
def compare(a,b):
if a+b < b+a:
return 1
else:
return -1
nums = list(map(str,nums))
nums = sorted(nums, key=cmp_to_key(compare))
return str(int(''.join(nums)))
โpermutation์ ํ์ฉํ ์๊ฐ์ด๊ณผ ์ฝ๋
from itertools import permutations
class Solution:
def largestNumber(self, nums: List[int]) -> str:
max_num = 0
for lst in permutations(map(str,nums),len(nums)):
num = ''.join(lst)
max_num = max(int(num),max_num)
return str(max_num)