프로그래머스

가장 큰 수

오리_꿀꿀 2021. 1. 8. 23:53

정렬을 사전식으로 해야한다는 것까지는 알았는데, 그 뒤가 문제였다.

 

3 32 과 같은 상황에서 332 > 323 이므로 3, 32로 정렬 되어야하는데, 32, 3 으로 정렬된다.

 

머리를 싸매다가 결국 솔루션을 보았는데, 두가지 해답이 존재했다.

두가지 모두 '정렬 메소드의 기준'을 바꿔서 풀었다.

 

1. 모든 수를 두개씩 붙여서 큰 수가 되도록 정렬한다.

예를 들어 32, 6, 3 이 있다면,

  1. 32, 6 : 326 < 632  => 6, 32
  2. 32, 3 : 323 < 332  => 3, 32
  3. 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)))

 

 

이 문제를 통해 얻을 수 있는 것들

 

  1. 정렬이란 결국 작게 보면, '두 수'를 어떠한 '기준'으로 정렬하는 것이므로 정렬을 할 경우 두 수의 관계에만 신경을 쓰면 전체적인 정렬이 완성된다!!
  2. 기존의 정렬 메소드의 기준을 내 맘대로 바꿀 수 있다는 것
  3. 정렬에 대해 공부를 더 해보아야겠다는 생각