주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210이다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return하라.
def solution(numbers):
num = list(map(str, numbers))
# x*3 은 문자열을 3번 반복하는 것.
# [“6”, “10”, “2”] 라면 666, 101010, 222가 됨.
# numbers의 원소가 1000 이하로 주어지므로, 3자리 수로 맞춰서 비교하는 것.
num.sort(key = lambda x: x*3, reverse= True)
# int 변환 후 str 변환을 함으로써, 모든 값이 0일 때 '000' 등을 0으로 만든다.
return str(int("".join(num)))
x*2
를 하면 안 되는 이유는, 99, 995일 경우 문자열 비교를 하더라도 995가 더 큰 수로 판별되기 때문. 만약 10,000 이하로 주어졌다면, x*4
를 하면 되겠지.예시) [“6”, “10”, “2”]
666, 101010, 222의 첫 번째 인덱스 값으로 비교.
첫 번째 인덱스가 같다면 두 번째 인덱스로 비교가 넘어간다.
여기서는 6=86, 1=81, 2=82 이므로 6>2>1 순이 됨.