코딩테스트

[프로그래머스/Python] 정렬 가장 큰 수

다트네 2021. 10. 14. 23:53
더보기

문제 설명

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'의 문자열로 합쳐서 반환해주는 함수인 것