문제 링크: https://programmers.co.kr/learn/courses/30/lessons/42746
입력으로 numbers라는 배열이 들어올 때, numbers 배열안에 있는 인덱스값으로 만들 수 있는 가장 큰 수를 리턴하는 것이 목적이다.
def solution(numbers):
numbers = list(map(str, numbers))
numbers = [num*3 for num in numbers]
numbers.sort(reverse=True)
answer = [num[:int(len(num) / 3)] for num in numbers]
return ''.join(answer)
입력 배열이 [4, 42]이면 리턴은 '4' + '42'로 442가 되어야하고,
입력 배열이 [4, 45]이면 리턴은 '45' + '4'로 454가 되어야한다.
즉, 배열의 인덱스값을 앞에서부터 비교해야 한다.
근데, 어렵게 생각할 필요가 없는 점이 바로 파이썬에서 string의 대소 비교관계는 글자의 앞에서 부터 비교를 하기 때문에 이 문제에 적합하다.
따라서 numbers를 string list로 바꿔준 뒤 글자 수 비교를 위해 각 인덱스값을 3배로 복사해준다. (EX. '6' => '666')
(하필 3을 곱해준 이유는 numbers의 인덱스값은 최대 1000이기 때문이다.)
그 다음 역정렬을 한 뒤, answer에 차례대로 값을 넣어주면 끝난다.
테스트 11이 틀렸다. 그래서 다른 사람의 풀이를 참고해보았다.
def solution(numbers):
numbers = list(map(str, numbers))
numbers.sort(key=lambda x: x*3, reverse=True)
return str(int(''.join(numbers)))
나와 비슷한 알고리즘으로 풀었지만, 훨씬 파이썬스럽다. key와 lambda를 이용해 코드가 더욱 간결해졌다.