♟️ 알고리즘/알고리즘_프로그래머스
[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로 형 변환을 해주면 된다.
📌 문제 코멘트
이 문제를 포스팅 하는 이유는 다음과 같다
- 정렬 시 , key = lambda x 문법 사용에 익숙해지기 위함이다.
- [... 30,3] 이거를 어떻게 정렬할지 도저히 몰랐는데, 저런 문자열 곱하기 방식이 너무 신기했다.
문자열 정렬이 좀 독특한게 많아서, 문제 풀면서 익숙해져보자 .
(저런 예외는 어떻게 생각하지 ... )