티스토리 뷰

728x90
반응형

문제

https://programmers.co.kr/learn/courses/30/lessons/42746?language=python3 

 

코딩테스트 연습 - 가장 큰 수

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰

programmers.co.kr

 

코드

from itertools import permutations 
def solution(numbers):
    answer = ''
    permution = list(permutations(numbers, len(numbers)))
    list_permution = []
    for i in permution:
        list_permution.append(''.join(map(str,i)))
    answer = max(list_permution)
    return answer

순열로 풀면 시간초과가 난다..

 

def solution(numbers):
    numbers = list(map(str, numbers))
    numbers.sort(key=lambda x: x*3, reverse=True)
    return str(int(''.join(numbers)))

['6','10','2'] => ['666','101010','222']

문자열 정렬은 인덱스 맨 앞에값에 아스키값을 비교해 정렬을 해준다고 한다 (같을경우 다음 인덱스도 비교)

reverse=True 이므로 ['6','2','10']으로 정렬 된다.

numbers 안이 str인데 int로 바꿨다가 다시 str로 바꿔주는 이유는 '00'이 겹치는 경우를 없애줄려고 해준다.

 

람다에 대해서 공부해야겠다고 느꼇다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30