https://school.programmers.co.kr/learn/courses/30/lessons/42746
1. 해결방법
가령 [3,300,31,387] 라는 숫자 리스트가 있다면 가장 큰 조합은 --> 387 3 31 310 이다.
가장 작은 수가 3 이더라도, 첫째자리 숫자 "3"은 310 31 의 두번째 자리 숫자 "1" 보다 크기 때문에, 3은 310 31 보다 앞에 나온다.
또 31은 31의 두번째 자리숫자 "1" 이 310 의 세번째 자리 숫자 "0" 보다 크기 때문에, 310 보다 앞에 나온다.
3 >31, 310 | 31 >310 |
3 31 310 |
31 310 |
따라서 비교 하는 숫자들의 자리수를 맞춰?서 비교를 해보기 위해 문자열 곱셈을 하여 숫자의 길이를 늘렸다.
3 ----> 3 3 3
31 --> 3 1 3 1 3 1
310 -> 3 1 0 3 1 0 3 1 0
3번씩 써서 늘리는 이유는 문제 조건에서 입력되는 숫자의 최대 크기가 1000미만이라 제시했기 때문이다.
따라서 입력되는 숫자의 최소길이는 1자리 최대길이는 3자리 일것이고, 1자리 숫자를 3자리로 불려줌으로써
문자형태의 숫자를 대소비교한다.
2. 정답코드
def solution(numbers):
answer = ''
numbers = list(map(str, numbers))
numbers.sort(key = lambda x:x*3, reverse=True)
answer = str(int(''.join(numbers)))
return answer
진짜,,, 하면서 머리카락 빠질만큼 스트레스를 받았다...
람다 공부 확실히 해야겠다. 그리고 1000이하라는 키워드로 정말 많이 틀렸다.
[참고]
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.2 멀쩡한 사각형 (2) | 2022.09.19 |
---|---|
[프로그래머스] Lv.2 124 나라의 숫자 (0) | 2022.09.19 |
[프로그래머스] Lv.2 다리를 지나는 트럭 (0) | 2022.09.18 |
[프로그래머스] Lv.2 게임 맵 최단거리 (0) | 2022.09.18 |
[프로그래머스] Lv.2 스킬트리 (0) | 2022.09.17 |