문제 링크

https://programmers.co.kr/learn/courses/30/lessons/42746

 

코딩테스트 연습 - 가장 큰 수

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰

programmers.co.kr

 

풀이

def solution(numbers):
    answer = ''
    numbers = sorted(list(map(str, numbers)), key=lambda x : x*3, reverse=True)
    answer = "".join(numbers)
    return str(int(answer))

처음에는 람다를 사용해서 key=lambda x : x[0] 으로 풀었는데 이렇게 하면 결과가 [9, 5, 3, 30, 34]가 된다. 34, 3, 30 순으로 정렬이 되어야 한다. 입력이 1,000 이하이기 때문에 한자리수를 세자리까지 늘리기 위해 x*3을 한다. 그러면 343434, 333, 303030이 되어 인덱스 비교를 편하게 할 수 있다.

도저히 모르겠어서 다른 풀이를 봤는데 x*3이 뭔지도 모르겠어서 한참을 고민했다.

리스트를 문자열로 바꿨기 때문에 x*3은 리스트의 요소에 *3을 하는 것이 아닌 문자열을 3번 이어붙이는 것이었다.