[프로그래머스/Python] 정렬 가장 큰 수
문제 설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
입출력 예
numbers | return |
[6, 10, 2] | "6210" |
[3, 30, 34, 5, 9] | "9534330" |
코드리뷰
def solution(numbers):
numbers=list(map(str,numbers))
numbers.sort(key = lambda x: x*3, reverse=True)
return str(int(''.join(numbers)))
1. int형인 numbers를 문자열로 변경
2. sort를 사용해서 정렬
※ x*3인 이유: 1000이하이므로 3자리수로 맞춰주기 위해서
3. 2번째 예시를 정렬할때 3이 30보다 앞에 나와야하는데 x*3으로 자리수를 맞춰주지 않으면 30이 앞으로 나오게됨
4. input이 [0,0,0,0]일 경우, 0으로 리턴해주기 위해 int로 바꾼후 다시 문자열로 바꾼다.
보충 공부
lambda
sort에 key값을 줌
a = [(1, 2), (0, 1), (5, 1), (5, 2), (3, 0)]
c = sorted(a, key = lambda x : x[0])
# c = [(0, 1), (1, 2), (3, 0), (5, 1), (5, 2)]
0번째 값을 비교해서 정렬하기 앞에 숫자들이 0,1,3,5,5 순으로 정렬된것을 확인
-sort와 sorted의 차이
sort는 원본 리스트를 정렬해주고 sorted는 원본은 유지되고 새로운 객체를 생성해서 정렬값을 넣어줌
list.sort()
a1 = [6, 3, 9]
print('a1:', a1)
a2 = a1.sort() # 원본을 정렬하고 수정합니다(in-place)
print('-----정렬 후-----')
print('a1:', a1)
print('a2:', a2)
"""
[6, 3, 9]
-----정렬 후-----
a1: [3, 6, 9]
a2: None
"""
sorted(list)
b1 = [6, 3, 9]
print('b1:', b1)
b2 = sorted(b1) # 원본은 유지하고 정렬한 새 리스트를 만듭니다
print('-----정렬 후-----')
print('b1:', b1)
print('b2:', b2)
"""
b1: [6, 3, 9]
-----정렬 후-----
b1: [6, 3, 9]
b2: [3, 6, 9]
"""
2. join 함수
''.join(리스트)를 이용하면 매개변수로 들어온 ['a', 'b', 'c'] 이런 식의 리스트를 'abc'의 문자열로 합쳐서 반환해주는 함수인 것