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

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

문제

링크 : 프로그래머스


풀이

가장 먼저 생각했던 풀이는 numbers 안에 값을 ‘문자열’로 취급해서 sort하는 방법을 생각했다.
가장 앞자리가 높은 순으로 정렬 후 join으로 맞춰 만들려 했다.
하지만 그 방법은 3, 30일 때, 30이 먼저 나오기 때문에 틀렸다. (코드 생략)
다음 방법은 permutations을 이용한 방법이었다.
이 방법은 시간 초과가 떴다. 아무래도 numbers의 길이가 100,000이하 이기에
모든 것을 순열로 리스트로 바꾸는 것 자체가 오래 걸릴 것이기 때문이다.
다음 방법은 lambda를 이용한 방법이다.(다른 사람 정답 봄)
문자열로 취급한 값을 정렬할 때, key 값을 x*3에서 비교하도록 만들었다.
그 이유는 원소 하나당 1000이하의 수기 때문에 3000, 300을 비교할 때도 가능하기 때문이다.

# 틀림
from itertools import permutations
def solution(numbers):
    res = []
    for i in range(len(numbers)):
        numbers[i] = str(numbers[i])
    res = list(permutations(numbers))
    for i in range(len(res)):
        res[i] = "".join(res[i])
    res  = sorted(res, reverse = True)
    return res[0]
def solution(numbers):
    num = list(map(str, numbers))
    num = sorted(num, key= lambda x: x*3, reverse=True)
    return str(int("".join(num)))

실수 및 배운 점

  • 실수했던 점은 key값을 제대로 이용하는 방법을 몰랐다는 것이다.
    고민했는데 if문을 이용할 생각만 했다…
    또 하나는 마지막 return 할 때, int, str을 안썼다.
    그 예외는 0이 가장 앞에 나올 때가 생기기 때문인 것 같다.