https://school.programmers.co.kr/learn/courses/30/lessons/42746
numbers가 [6, 10, 2]일 경우 원소값이 정수이기 때문에 오름차순 정렬하게되면 10, 6, 2를 얻게됩니다.
따라서, 먼저 떠오른 아이디어는 "문자열로 변경 후 정렬하면 되지 않을까?"였습니다.
def solution(numbers):
answer = ''
numbers = sorted(map(str, numbers), reverse=True)
answer = ''.join(n for n in numbers)
return answer
하지만 테스트2 같은 경우에, '3'과 '30'의 순서가 맞지 않았습니다.
역시 쉽게 풀 수 있는 문제가 있을리가 없죠..
[3, 30, 34]라는 값이 있을 때, 결과가 [34, 3, 30]이 될 수 있도록 해야합니다.
처음에는 3과 30의 자리를 바꾸기위해 자릿수를 맞추고 아스키코드를 이용하면 되지 않을까 했지만, '0'보다 크고 '4'보다는 작아야 하는 값은 '1', '2', '3'이고 이것은 숫자 자체로도 사용될 수 있기때문에 이 방법으로는 불가능했습니다.
다른 사람의 풀이를 참조한 코드는 아래와 같습니다.
def solution(numbers):
answer = ''
numbers = sorted(map(str, numbers), key = lambda x: x * 4, reverse=True)
answer = ''.join(n for n in numbers)
return str(int(answer))
[3, 30, 34]을 정렬할 때, 각 원소를 4번씩 반복하여(최대입력 4자리) 비교하는 방법입니다.
4번씩 반복하면, [3333, 30303030, 34343434]이 되고 정렬하면 [34343434, 3333, 30303030]이 되며 원래 값으로 보면 [34, 3, 30]이 됩니다.
이것을 numbers = sorted(map(str, numbers), key = lambda x: x * 4, reverse=True)으로 만들 수 있습니다.
추가로 numbers가 [0, 0]일 경우, 반환값은 '00'이 됩니다. 따라서 str(int(answer))을 통해 불필요한 '0'을 제거해서 최종 반환할 수 있도록 해야 모든 케이스를 통과할 수 있습니다.
'Coding Test > Sorting' 카테고리의 다른 글
[Sorting] H-Index (0) | 2023.09.08 |
---|