조합할 수 있는 가장 큰 수로 만들기
예: [30, 34, 3, 9] 일 때 답은 934330
def solution(numbers):
numbers = list(map(str, numbers))
numbers.sort(key=lambda x: x*3, reverse=True)
return str(int(''.join(numbers)))
1. numbers = list(map(str, numbers))
# 실행결과 : ["30", "34", "3", "9"]
int 를 string 으로 변경하게 되면 앞자리부터 정렬할 수 있으므로
변경해준다.
2. numbers.sort(key=lambda x: x*3, reverse=True)
# 실행 결과 : ["9" ,"34", "3", "30"]
일단 람다식을 설명하자면, 각 원소에 3을 곱한다는것이다.
문자열이므로 같은 문자를 3번 반복한다.
이는 구체적으로
1. 3과 30 사이에서 30 대신 3을 선택해야하기때문
2. 문제 조건에서 숫자는 1000이하라고 정해져있어서, 자리수를 맞춰주기위해
람다식만 실행시키면 ["303030","333","343434","999"]이다.
앞자리수부터 비교하므로!!!!
그러나 우린 큰 숫자를 만들어야하기때문에 내림차순으로 정렬해준다.
내부적으론 ["999","343434","333","303030"] 가 되어,
결과적으로 ["9","34","3","30"] 이 실행결과가 되겠다.
3. return str(int(''.join(numbers)))
# 실행결과 : "934330"
11번 테스트케이스인 [0,0,0,0] 일 때 "0" 이 나와야한다.
단순히 string으로 join만 하면, "0000" 이 된다.
그러므로 먼저 int 로 바꿔주어서 숫자형식이 되게하고,
문제의 지시대로 string으로 바꿔주면 된다.