! permutations 활용해서 테스트 케이스는 모두 통과 하였지만 제출할 때 시간초과가 나오면서 실패했다...
다음 코드가 내가 작성한 코드이다.(시간초과)
from itertools import permutations
def solution(numbers):
size = len(numbers)
arr = list(permutations(numbers,size))
number_list = []
for i in arr:
number = "".join(map(str, i))
number_list.append(number)
answer = max(number_list)
return answer
위의 코드는 아무래도 permutations가 모든 경우의 수를 찾기 때문에 시간 초과가 나온 것 같다.
다른 분들이 작성한 코드를 찾아 봤는데 파이썬 정렬 라이브러리의 key를 활용하였다.
def solution(numbers):
number = list(map(str, numbers)
number.sort(key = lambda num : num * 3, reverse = True)
return str(int(''.join(number)))
먼저 numbers 리스트의 값들을 str로 변환한 후 다시 list로 변환한다.
number를 key를 기준으로 sort()를 사용하여 정렬한다.
이때 key로 lambda를 활용한다. num * 3을 한 이유는 제한 사항에서 원소가 1,000 이하이기 때문에 3자리 수로 맞춰서 비교하기 위함이다.
이 부분을 이해하기 어려웠다.
문자열의 경우 ASCII 값으로 치환되어 정렬되기 때문에, 666, 101010, 222의 첫 번째 인덱스 값으로 비교한다고 한다.
6 > 2 > 1의 순으로 정렬되어 오름차순으로 나타내면 [10, 2, 6] 이지만 reverse 파라미터를 활용해 [6, 2, 10]으로 뒤집었다.
마지막으로 int를 다시 str로 변환한다. 이유는 '000'을 처리하기 위해서이다.
key를 활용할 생각을 못했는데 좋은 공부가 되었다. 추가로 파이썬 람다에 대해서도 공부할 필요성을 느꼈다.