[ PS / Python ] 42746. 가장 큰 수

박제현·2024년 2월 10일
0

코딩테스트

목록 보기
22/101

풀이.

우선 입출력 예를 보면 알 수 있듯이, 가장 첫번째 숫자 즉, 맨 앞의 숫자의 크기를 기준으로 정렬하고, 그 다음 번째 숫자 기준으로 정렬, 그 다음 다음 번째 숫자 기준으로 정렬 ... 한 뒤 join 하여 리턴한다.

여기서 정수형으로 들어온 값을 자릿 수 별로 비교하기 위해서, 값들을 문자형으로 변경해준다.
그 다음 각 숫자의 자릿수를 맞쳐줘야지, 1,000 이하인 값끼리 비교할 수 있다.
예를 들어, '3' 과 '30' 은 정렬했을 때 '30' 보다 '3'이 앞에 있어야 하므로 자릿수를 맞춰줘야 서로 비교한 뒤 정렬이 가능하다.

sort 함수의 키 값을 지정하지 않으면 기본적으로 원자를 키 값으로 두고 비교하기 때문에, 여기서 lambda 함수를 사용하여 문자열의 길이를 맞춰준 뒤 비교한다.

lambda x : x * 3 으로, 각 숫자의 길이를 최소 3자리 수를 가질 수 있게 만들어준다.

이렇게 되면 '3' 은 '333'으로 , '30' 은 '303030' 을 기준으로 비교하게 되고, 여기서 값의 크기와 상관없이 똑같은 길이를 기준으로 문자열은 비교하기 때문에 '333'과 '303'을 비교하게 된다.

코드.

def solution(numbers):
    answer = ''

    numbers = list(map(str, numbers))
    numbers.sort(key=lambda x: x + x * 3, reverse=True)

    return answer.join(numbers)

profile
닷넷 새싹

0개의 댓글