ror_coding

[Programmers] 가장 큰 수 - 42746 본문

Algorithm/Python

[Programmers] 가장 큰 수 - 42746

ro_rdil_31 2024. 12. 11. 17:16
728x90
728x90

lstrip과 lambda x : x*3 이용하기 ! 

제한 사항을 잘 읽고 활용하여 풀자.

 

Question

 

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

제한 사항
numbers의 길이는 1 이상 100,000 이하입니다.
numbers의 원소는 0 이상 1,000 이하입니다.
정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.

 

Point

 

  • 제한 사항에서 numbers의 원소가 1000이하이기 때문에 문자열에 *3을 곱해서 모든 수가 4자리 이상이 되게 만듦.
  • 이를 비교하여 역순으로 정렬하면 답으로 붙일 원소로 나열됨.
  • 이 원소들을 string type으로 만든 값이 '0'으로 시작할 수 있기 때문에 lstrip 해줌.
  • (이때 모든 수가 0이라면 '' (빈 문자열)이 되기 때문에 '0'을 return 해줌.

 

Code : After

 

def solution(numbers):
    answer = ''.join(sorted([str(i) for i in numbers], key = lambda x : x*4, reverse = True))
    return answer if len(answer)!=answer.count('0') else '0'

 

Code : Before

 

def solution(numbers):
    numbers = sorted([str(n) for n in numbers], key = lambda x : x*3, reverse=True)
    return (''.join(numbers)).lstrip('0') if (''.join(numbers)).lstrip('0')!='' else '0'  
    # return  str(int(''.join(numbers)))

 

now me

On my github

 

728x90