어떻게 매번 자리수를 잘라서 비교하지..? 를 고민하고 고민하다가 결국 포기하고 다른 분들의 풀이를 봤다...
보자마자 황당하고.. 멋지고... 코드가 진짜 경이롭네
def solution(numbers):
numbers = list(map(str, numbers))
numbers.sort(key = lambda x: x*3, reverse=True)
return str(int(''.join(numbers)))
string 으로 바꿔서 비교할 생각은 했었는데.. 그걸 x*3으로 해결하다니 천재다.
- map 사용해서 list의 원소들을 string으로 변환하게 매핑하고, list로 리턴
- lambda x : x*3 -> num 인자 각각의 문자열을 3번 반복
- x*3을 하는 이유? -> num의 인수값이 1000 이하이므로 3자리수로 맞춘 뒤, 비교하겠다는 것.
9, 991 이면 9를 2번 반복해도 99, 991로 여전히 991이 더 앞편에 정렬되기 때문.
- 문자열을 비교해서 정렬
문자열 비교는 ASCII 값으로 치환되어 정렬.
따라서 666, 101010, 222로 생각하면 첫번째 값으로 비교.
6 = 86, 1 = 81, 2 = 82 이므로 1 < 2 < 6 순.
- 내림차순으로 정리하기 위해 reverse = True
- ''.join(num)로 문자열을 합치기
- int로 변환한 뒤, 다시 str로 변환
모든 값이 0일 때(예>'000')를 처리해주기 위해서.