문제 설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항
입출력 예
접근법
문제는 이해했습니다.
하지만, 접근조차 할 수 없어 결국 구글링을 통해 여러 풀이방법을 보고 이해하는데 2시간이 넘게
걸렸습니다.😥😟
역시나 그렇듯 코딩도장을 통해 2번째 학습 중이지만 실전 알고리즘 문제를 푸는것은 어렵습니다.
좋은 알고리즘이 있어 이를 참고하고 어떻게 동작하는지 이해하기 위해 아래 내용을 공부하였습니다.
복습에 중점을 두고 공부하기로 마음먹었기 때문에 이후에 다시 공부를 하겠습니다.
- lambda와 map의 활용법 🏆**중요**
- sort 함수의 key 사용법
- ASCII 값 상태에서 문자열 비교
- join 함수 사용법
여러 코드를 공부 중 아래 코드의 형태는 간결함에 반해 가져와 보았습니다.
3가지 핵심적인 부분을 말해보겠습니다.
x*3을 하는 이유는 무엇일까?
문자열 비교
위 내용대로라면 굳이 x*3이 필요한지 의문입니다. 추후 공부를 통해 이를 이해해보도록 하겠습니다.
sort()의 기본 정렬 기준
=============================================================
def solution(numbers):
numbers = list(map(str, numbers))
numbers.sort(key = lambda x : x*3, reverse = True)
return str(int(''.join(numbers)))