문제 풀이
def solution(numbers):
# map을 사용하여 numbers를 str타입으로 고정.
numbers = list(map(str, numbers))
# 하단 설명 참조
numbers.sort(key=lambda x: x * 3, reverse=True)
# ['0', '0', '0', '0'] 같이 0으로만 이루어진 배열을 대비하기 위함
# 이런 배열이 나오게 되면 "0000"으로 반환될 수 있기 때문에
# 안에서 int타입으로 변환하여 숫자를 뽑은 후 다시 str타입으로 변경하여 리턴한다.
# ''.join()은 배열내의 각 문자열을 하나로 합쳐주는 내장함수이다.
return str(int(''.join(numbers)))
1. lambda x : x * 3
- numbers의 각 인자를 3번 반복한다는 뜻이다. ex)['6', '10', '2'] >> '666', '101010', '222'
- 제한사항 중 "numbers의 원소는 0 이상 1,000 이하입니다." 라는 문구가 있다. numbers의 값은 1000 이하이므로 3자리 수까지만 맞춰서 비교해도 원하는 답을 찾을 수 있다. 1000자리 이상이면 그만큼 x*n에서 n값을 늘리면 된다.
- numbers는 문자열(str) 상태이고, 이 상태에서 비교를 시도하게 되면 ASCII 값으로 치환되어 비교한다.
- 각 문자열의 첫 번째 인덱스부터 비교한다. 당장은 [10, 2, 6]으로 정렬된다. 숫자 자체가 아니라 첫번째 값인 [1, 2, 6] 순으로 정렬되었다고 볼 수 있다.
- 이를 큰 순서대로, 즉 내림차순으로 정렬해야 하기 때문에 reverse=True를 추가한다. 이렇게 하면 [6, 2, 10] 순으로 정렬된다.
문제 링크
programmers.co.kr/learn/courses/30/lessons/42746
코딩테스트 연습 - 가장 큰 수
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰
programmers.co.kr
'Python > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [Python] 모의고사 (0) | 2020.12.11 |
---|---|
[프로그래머스] [Python] H-Index (0) | 2020.12.09 |
[프로그래머스] [Python] K번째 수 (0) | 2020.12.03 |
[프로그래머스] [Python] 이중우선순위큐 (0) | 2020.12.02 |
[프로그래머스] [Python] 디스크 컨트롤러 (0) | 2020.12.02 |