오류에 대한 지적이나 질문, 토의 환영합니다. 자유롭게 댓글 남겨주세요!.!
프로그래머스 가장 큰 수 문제의 링크입니다.
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
numbers | return |
---|---|
[6, 10, 2] | "6210" |
[3, 30, 34, 5, 9] | "9534330" |
주어진 리스트의 값을 활용해 가장 큰 수를 만드는 문제입니다. 내림차순으로 정렬해야겠다는 생각이 들었습니다.
그러나, 숫자(numbers
의 원소)의 길이가 같지 않아 숫자의 크기로는 제대로 정렬이 되지 않습니다.
그래서 정렬의 key
값을 문자열을 기준으로 정렬해야겠다고 생각했습니다.
그런데 위의 생각대로 입출력 예제2를 정렬한다면 과 의 정렬 순서가 맞지 않는 것을 알 수 있습니다.
3은 32보다는 앞에 정렬되어야 하고, 4는 43보다 앞에 정렬되어야 하고, 5는 54보다 앞에 정렬되어야 합니다.
3과 32 뿐만이 아니고 33과 320 또한 33이 320보다 앞에 정렬되어야 합니다.
이를 쉽게 구현할 수 있는 방법은 숫자를 거듭해서 쓰는 것입니다.
숫자는 모두 1000보다 작은, 최대 세 자리 수이므로 3을 333으로 만들면 되므로 3번만 거듭해서 씁니다.
def solution(numbers):
numbers.sort(key=lambda x: (str(x)*3), reverse=True)
answer = ''.join(str(s) for s in numbers)
return str(int(answer))
.join()
할 때ㅐ: 이 글은 프로그래머스 스쿨 인공지능 데브코스 과정에서 공부한 내용을 바탕으로 정리한 글입니다.