[정렬] 가장 큰 수

개발새발log·2021년 10월 2일
0

Programmers

목록 보기
3/35

접근 방식

누구나 스트링으로 변환해서 사전형 정렬하는 것까지 쉽게 생각해낼 것 같다. 관건은 두번째 테스트 케이스를 어떻게 처리할지..⭐️

  • 만약 두번째 테스트 케이스를 단순 사전형 정렬한다면 [9, 5, 34, 30, 3]이 된다!!
  • 어떻게 [9, 5, 34, 3, 30]라는 결과를 도출할까??

📌 POINT

제한 사항을 참고해보면 numbers의 원소는 0 이상 1000 이하이므로
최대값을 고려해 3을 곱한다

그러면 [999, 555, 343434, 303030, 333]이 된다.
(비교를 용이하게 하기 위해 최소한의 자리수를 맞춰주는 개념이라고 보면 되겠다)

이런 기준으로 정렬하면 [999, 555, 343434, 333, 303030]이 되므로 [9, 5, 34, 3, 30]라는 결과를 도출할 수 있다!

천재다.. 다들 어떻게 이런 걸 생각해냈지.. 처음에 이걸 생각 못하고 어어어엄청 헤맸다🥲

여기서 또 놓치면 안될 테스트케이스가 존재한다. 바로 모든 원소가 0일 때!
예를 들어 [0, 0, 0, 0]이 주어지면 0000이 반환되선 안되고 0이 반환되어야 한다.
(아래 최종 코드에 이어서 설명하겠다)

최종 코드

def solution(numbers):
    strNums = list(map(str, numbers)) #1
    sortedStr = sorted(strNums, key=lambda x : x*3, reverse = True) #2
    answer = str(int(''.join(sortedStr))) #3
    return answer
  1. int형 리스트를 map()을 활용해 string 형으로 형변환
  2. 자리수를 맞춰서 정렬하기 위해 람다 표현식을 활용한다. 최소한 세자리수로 만들기 위해 세번 곱해주는 람다 함수를 작성했다.
  3. 모든 원소가 0인 경우를 고려하여 int형으로 변환 후, 다시 string형으로 변환하였다.
profile
⚠️ 주인장의 머릿속을 닮아 두서 없음 주의 ⚠️

0개의 댓글