Study/Algorithm

[프로그래머스] 가장 큰 수 (Python)

ZZIN33 2021. 12. 5. 17:14

정수 리스트에서 조합 가능한 가장 큰 수를 찾는 문제. 
처음에는 직관적으로 가능한 조합을 모두 찾은 뒤 그중에서 가장 큰 수를 출력해봤다.

import itertools

def solution(numbers):
    answer = []
    
    number_list = list(itertools.permutations(numbers, len(numbers)))
    for number in number_list:
        answer.append("".join(map(str,number)))
        
    return max(answer)

당연하게도 순열로 가능한 조합을 만드는 과정이 시간이 많이 걸려서, 시간 초과로 fail.
다음으로 생각한 방법은 숫자의 앞자리를 기준으로 내림차순으로 숫자를 정렬하기.

def solution(numbers):
    
    numbers = list(map(str, numbers)) # str 기준으로 비교, 숫자의 앞자리로 비교하기 위함
    numbers.sort(key=lambda x: x*3, reverse=True) # 숫자 뒤에 0이 들어가는 경우 순서를 뒤로하기 위함
    
    return str(int(''.join(numbers))) # e.g. '0000'을 '0'로 바꿔주기 위함

numbers.sort(key=str, reverse=True)를 통해서 어느 정도 정답에 근접했지만, '30'과 '3'처럼 뒤에 0으로 끝나는 숫자가 뒤로 배치되어야 할 필요가 있었다.
먼저 str로 변환한 뒤 key=lambda x : x*3 을 통해서 전체 자릿수를 맞춰준 뒤 비교를 통해서 이를 해결했다.
최종적으로 '0000' 과 같은 숫자를 '0'으로 바꿔주기 위해서 최종 결과를 int로 한번 감싸준다.