https://school.programmers.co.kr/learn/courses/30/lessons/42746?language=python3
def solution(numbers):
# join을 위해 리스트 안 요소들 str로 변환
answer = list(map(str, numbers))
# x*3을 하는 이유? -> num의 인수값이 1000 이하이므로 3자리수로 맞춘 뒤, 비교
answer.sort(key = lambda x : x*3, reverse = True)
# '0011'처럼 표현된 값을 11로 바꾸기 위해 int, 문제의 요구사항을 맞추기 위해 str로 형변환
return str(int(''.join(answer)))
<입출력 예시1 기준>
x 곱하기 3을 할 경우 666, 101010, 222의 첫번째 인덱스 값으로 비교한다. (6, 1, 2) 내림차순으로 정렬하면 6, 2, 10이 된다.
lambda식의 내림차순 정렬하는 시점에서 x * 3된 값으로 비교를 하지만, 실제 값에는 적용되지 않는다.
permutations를 이용해 모든 경우의 수를 구하고 정렬 후 답을 구하려 했지만 numbers의 길이가 길고 리스트 안 요소가 많아 시간초과가 났다.
import itertools
def solution(numbers):
numbers = list(map(str, numbers)) # join을 위해 리스트 안 요소들 str로 변환
nPr = list(itertools.permutations(numbers, len(numbers))) # 모든 경우의 수 구하기 (조합)
result = []
for npr in nPr:
result.append(''.join(npr))
answer = sorted(result)[-1]
return answer