Algorithm/Programmers

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

밍츠 2022. 7. 1. 17:55

문제 : 가장 큰 수

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

 

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

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

programmers.co.kr

 

 

나의 풀이

1. permutation (순열) 을 이용해서 풀려했는데 시간초과

permutation 시간 복잡도 O(N!)

 

2. 문자열로 변경하고 reverse로 해서 이어붙이는 방법을 생각했는데 30을 3보다 크다고 판단한다.

 

 

 

정답 풀이

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

- sort로 정렬할 때 key로 정렬 기준을 설정한다.

- reverse = True : 내림차순

- "".join(리스트) : 리스트에 있는 문자열을 합쳐준다.

 

ex) 30 3 을 비교할 때 아래와 같이 자리수로 비교하여 3이 더 큰 수로 판단한다.

303030

333

-> 3 > 30

ex) 9 91 999

999

919191

999999999

 

-> 999 > 9 > 91