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

문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42746#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제

나의 풀이
def solution(numbers):
answer = ''
numbers = list(map(str, numbers))
numbers.sort(key = lambda x : x*3,reverse=True)
for i in numbers:
answer += i
return str(int(answer))
- 제시된 숫자들중 [0]이 가장 큰 것들을 선별하고, 선별한 숫자들의 길이에 따라 다음에 오는 수를 결정한다.
예를들어 내가 임의로 만든 [3, 30, 34, 5, 9, 92, 901]의 배열이 있다면, [0]이 가장 큰 9, 92, 901을 먼저 선별 한다.
이때, 901은 세자리수이고 92는 두자리수, 9는 한자리수이므로 어떤 수를 택하느냐에 따라 뒤에 오는 숫자의 크기가 달라진다.
만들어야 할 수가 "가장 큰수"이므로 먼저 선별한 [0]가 9인 숫자들을 제외하고 [0]이 가장 큰 수인 5가 와야한다.
- 여기서 1차 난관에 봉착하였는데 [9, 92, 901]의 크기를 어떻게 적절히 비교하고 뒤에 5가 올 수 있도록 해야하는지 고민이었다.
- 제한사항에서 number의 원소가 0이상 1,000이하라고 주어졌으므로 3번 반복하여 비교하는 방식을 고안하였다.
예를들어 [3, 30, 34, 5, 9, 92, 901] 의 경우
333, 303030, 343434, 555, 999, 929292, 901901901 로 만들고
앞에서부터 3자리수로 만들어 내림차순으로 정렬한다.
- 마지막 return 값을 그냥 answer로 하면 안 되는데, 이는 [0, 0] 이 주어진다면 '00'으로 출력되기 때문이다.
따라서 숫자로 바꾼 뛰 다시하번 문자로 바꾸어준다.