프로그래머스
가장 큰 수
오리_꿀꿀
2021. 1. 8. 23:53
정렬을 사전식으로 해야한다는 것까지는 알았는데, 그 뒤가 문제였다.
3 32 과 같은 상황에서 332 > 323 이므로 3, 32로 정렬 되어야하는데, 32, 3 으로 정렬된다.
머리를 싸매다가 결국 솔루션을 보았는데, 두가지 해답이 존재했다.
두가지 모두 '정렬 메소드의 기준'을 바꿔서 풀었다.
1. 모든 수를 두개씩 붙여서 큰 수가 되도록 정렬한다.
예를 들어 32, 6, 3 이 있다면,
- 32, 6 : 326 < 632 => 6, 32
- 32, 3 : 323 < 332 => 3, 32
- 6, 3 : 63 > 36 => 6, 3
따라서 6, 3, 32 순으로 정렬된다.
2. 수의 길이를 3배씩 반복시켜서 문자열 정렬을 하면 답이 된다....(신기)
def solution(numbers):
numbers = list(map(str, numbers))
numbers.sort(key=lambda x: x*3, reverse=True)
return str(int(''.join(numbers)))
이 문제를 통해 얻을 수 있는 것들
- 정렬이란 결국 작게 보면, '두 수'를 어떠한 '기준'으로 정렬하는 것이므로 정렬을 할 경우 두 수의 관계에만 신경을 쓰면 전체적인 정렬이 완성된다!!
- 기존의 정렬 메소드의 기준을 내 맘대로 바꿀 수 있다는 것
- 정렬에 대해 공부를 더 해보아야겠다는 생각