
정수 리스트에서 조합 가능한 가장 큰 수를 찾는 문제.
처음에는 직관적으로 가능한 조합을 모두 찾은 뒤 그중에서 가장 큰 수를 출력해봤다.
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로 한번 감싸준다.
'Study > Algorithm' 카테고리의 다른 글
[백준] 2578번 : 빙고 (Python) (0) | 2022.01.17 |
---|---|
[백준] 1655번 : 가운데를 말해요 (Python) (0) | 2021.12.06 |
[프로그래머스] 주식가격 (Python) (0) | 2021.12.02 |
[백준] 9663번 : N-Queen (Python) (0) | 2021.11.30 |
[백준] 5430번: AC (Python) (1) | 2021.11.29 |