0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
※ 공지 - 2021년 10월 20일 테스트케이스가 추가되었습니다.
import itertools
def solution(numbers):
answer = ''
for i in range(len(numbers)):
numbers[i] = str(numbers[i])
all_case = list(itertools.permutations(numbers, len(numbers)))
real_case = []
for case in all_case:
tmp = int(''.join(case))
real_case.append(tmp)
return str(max(real_case))
테스트 케이스는 모두 통과했지만, 시간 초과로 거의 다 실패했다.
정확성: 26.7, 합계: 26.7 / 100.0
직접 모든 조합을 itertools를 통해 경우를 저장하고, 숫자로 바꿔서 리스트에 모두 저장한 후에 그 리스트에서 가장 큰 값을 max를 통해 확인했다. 가장 처음으로 든 생각이지만, 문제에 ‘정답이 너무 클 수 있으니 문자열로 바꾸어 return합니다’로 써있다. 문자열로 처리하라는 힌트였다.. 그래서 첫번째 자리 숫자가 클수록 앞에 오면 되지 않을까?? 라는 생각으로 두 번째 풀이로 출발~