♟️ 알고리즘/알고리즘_프로그래머스

[Python][프로그래머스] 가장 큰 수 / 정렬 (Lv2)

Jerry_K 2025. 2. 21. 19:25

🖇️ 링크 

https://school.programmers.co.kr/learn/courses/30/lessons/42746#


🗒️ 파이썬 코드 풀이

def solution(numbers):
    
    lst = list(map(str,numbers))
    lst = sorted(lst, key=lambda x:x*3, reverse=True)
    answer = str(int(''.join(lst)))
    
    return answer

 

시간 복잡도 O( N·Log N)

 

 

1. 해당 문제에서 일반 정렬을 하면 안된다. 

[3, 30, 34, 5, 9]

일반 정렬을 할 경우, [9, 5, 34, 30, 3] 이 되는데, 이거를 합쳐도 최대 값이 나오지 않는다. 

 

 

2. 이 문제의 목표는 저런 배열이 나왔을 때, [9, 5, 34, 3, 30] 의 형식으로 만들어 주는 것이다.

 

 

3. 이렇게 만들기 위해서는 sort 함수를 커스텀 해야한다. 

  • 문제에서 numbers의 원소는 1000 이하
  • 따라서 문자 * 3을 해주면 원하는 형식대로 정렬 가능
  • 원소의 자리 수 만큼 *를 해주면 됨 
  • ex)  "303030" 과 "333" 를 비교 

 

4. 이렇게 제출하면 "000" 이런 값들 때문에, 테스트 케이스 한개가 실패한다. 

따라서 int로 형 변환 후, 다시 str로 형 변환을 해주면 된다.

 


📌  문제 코멘트 

이 문제를 포스팅 하는 이유는 다음과 같다

  1. 정렬 시 , key = lambda x  문법 사용에 익숙해지기 위함이다. 
  2. [... 30,3] 이거를 어떻게 정렬할지 도저히 몰랐는데, 저런 문자열 곱하기 방식이 너무 신기했다.

 

문자열 정렬이 좀 독특한게 많아서, 문제 풀면서 익숙해져보자 .

(저런 예외는 어떻게 생각하지 ... )


📚  문제