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로 한번 감싸준다.