lv 2. 가장 큰 수

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의 순으로 정렬되어야한다.

  1. 34+3이 큰지, 3+34가 큰지 비교하여 큰게 앞에 오도록 한다
  2. 혹은 numbers.sort(key=lambda x: x*3, reverse=True) 을 이용해 343434, 333, 303030이 비교되게 한다.

구현은 두번째 방법을 이용했다.

💡코드

첫번째 시도

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

Untitled

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