정수를 이어 붙여 만들 수 있는 가장 큰 수 구하기
numbers | return |
---|---|
[6, 10, 2] | "6210" |
[3, 30, 34, 5, 9] | "9534330" |
시도1. 순열로 가능한 모든 조합을 찾는다. 그 중 가장 큰 수를 리턴한다. ---> 시간 초과
시도2. 내림차순으로 정렬한 후 이를 이어 붙여 리턴한다.
실제 수는 3이 30보다 크지만, 문자열을 이어붙일 때는 303보다 330이 더 크기 때문에 3이 30보다 큰 순서로 정렬해야한다. 원소는 1000이하이기 때문에 같은 수를 세번 반복한 수와 비교를 해볼 수 있다. 또한 문자열에서의 수의 비교는 앞에서부터 비교하기 때문에 '333' > '303030'이다.
모든 원소가 0일 때
만약 [0, 0, 0, 0]이면 0을 리턴해야하는데 문자로 취급하여 이어붙이면 0000이 된다. 따라서 이를 정수형을 바꿔준 후 다시 문제의 조건에 따라 문자형으로 바꾼 결과를 최종 리턴하면 된다.
def solution(numbers):
nums = list(map(str, numbers))
nums = sorted(nums, key=lambda x : x*3, reverse=True)
return str(int(''.join(nums)))