TIL#22 ALGORITHM (가장 큰 수)

ahn__jh·2021년 9월 6일
0
post-thumbnail

문제 설명
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"
  1. numbers매개변수로 들어오는 정수형태로 들어온 배열을 문자열 형태의 배열로 바꿔준다.

  2. lambda 함수로 1000이하 이기 때문에 세자리 수로 만들기위해 문자열 3 하면 문자열은 정렬시 ascii코드로 비교하여 정렬 되기때문에 문자열에 3 을하게됨 한자리씩 비교하여 정렬하기 때문에 *3 해서 1000이상의 수는 상관없다. (한자리 수 만 1000이하로 만들어주면 되는 것)

  3. 정렬된 배열을 join 함수로 합쳐서 문자열로 리턴

  4. 예외처리 매개변수로 들어온 배열의 정수가 모두 0인경우 마지막에 리턴하게되면 "000" 이런식으로 출력되기 때문에 처음부터 배열의 합이 0이면 문자열 "0"이 리턴 되도록 작성


작성한 코드

def solution(numbers):
    if sum(numbers) == 0:
        return "0"
    
    arr = [str(i) for i in numbers]
    arr = sorted(arr, key = lambda x:x*3,reverse = True)
    
    return ''.join(arr)

0개의 댓글