https://school.programmers.co.kr/learn/courses/30/lessons/42746
숫자의 조합 중 가장 큰 수를 구한다.
numbers | return |
---|---|
[6, 10, 2] | "6210" |
[3, 30, 34, 5, 9] | "9534330" |
3, 30, 34, 5, 9가 있을 경우 9<<5<<34<<3(3)<<30의 순으로 정렬되어야한다.
구현은 두번째 방법을 이용했다.
첫번째 시도
def solution(numbers):
answer = ''
strings=[]
result=[]
def search(count):
if count==len(numbers)+1:
strings.append(''.join(map(str,result)))
return
for i in range(0, len(numbers)):
if numbers[i] not in result:
result.append(numbers[i])
search(count+1)
result.pop()
#모든 조합을 구한 후 최대값 리턴하기
search(1)
answer = max(strings)
return answer
dfs로 모든 조합을 다 구한 후 최대값을 리턴했다
수정해서 맞은 코드
def solution(numbers):
answer = ''
strings = list(map(str, numbers))
strings.sort(key=lambda x: x*3, reverse=True)
answer = str(int(''.join(strings)))
return answer