🖇️ 링크
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] 이거를 어떻게 정렬할지 도저히 몰랐는데, 저런 문자열 곱하기 방식이 너무 신기했다.
문자열 정렬이 좀 독특한게 많아서, 문제 풀면서 익숙해져보자 .
(저런 예외는 어떻게 생각하지 ... )
📚 문제
'♟️ 알고리즘 > 알고리즘_프로그래머스' 카테고리의 다른 글
[MySQL][프로그래머스] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 / (Lv4) (0) | 2025.02.21 |
---|---|
[Python][프로그래머스] 전화번호 목록 / 해시,정렬 (Lv2) (0) | 2025.02.21 |
[Python][프로그래머스] 프로세스 / 스택, (Lv2) (0) | 2025.02.18 |
[Python][프로그래머스] 주식 가격 / 스택 (Lv2) (0) | 2025.02.15 |
[Python][프로그래머스] 최대공약수와 최소공배수 (0) | 2024.05.16 |