동캄의 코딩도장

프로그래머스 level2 [가장 큰 수] 파이썬 본문

코테/프로그래머스

프로그래머스 level2 [가장 큰 수] 파이썬

동 캄 2021. 12. 8. 12:55

https://programmers.co.kr/learn/courses/30/lessons/42746

 

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

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

programmers.co.kr

시도 1

#프로그래머스 가장 큰 수
def solution(numbers):
    numbers=list(map(str,numbers))
    numbers.sort(reverse=True)
    for i in range(len(numbers)):
        for j in range(i+1,len(numbers)):
            small_len=min(len(numbers[i]),len(numbers[j]))
            for k in range(small_len):
                if int(numbers[i][k])<int(numbers[j][k]):
                    numbers[i],numbers[j] = numbers[j] , numbers[i]
            else:
                if len(numbers[i])<len(numbers[j]):
                    if int(numbers[i][k])<int(numbers[j][k+1]):
                        numbers[i],numbers[j]=numbers[j],numbers[i]
                elif len(numbers[i])>len(numbers[j]):
                    if int(numbers[i][k+1])<int(numbers[j][k]):
                        numbers[i],numbers[j]=numbers[j],numbers[i]
    return ''.join(numbers)

반복문을 반복하면서, 각 자리수를 하나씩 비교하였다. ---> 시간초과

 

시도2

 

Ljust()함수를 이용하여 값을 정렬 후, 값을 return하려 했으나 --->실패

 

시도3

#프로그래머스 가장 큰 수
def solution(numbers):
    numbers=list(map(str,numbers))
    numbers.sort(key=lambda x:x*3, reverse=True)    
    return str(int(''.join(numbers)))

결국 다른 사람의 풀이를 통해 문제를 이해했다.

lambda를 이용하여 3번 반복한 값을 비교한다.