문제링크 :https://programmers.co.kr/learn/courses/30/lessons/42746

 

코딩테스트 연습 - 가장 큰 수

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 ��

programmers.co.kr

 

 

 문제설명 

 

0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하는 solution 함수

 

 

 알고리즘 

 

1. 문자를 정렬 하는데 정렬하는 기준이 되는 boolen 을 재정의 해준다.

2. 재정의 기준은 문자를 더해서 우선순위에 맞게 return 하면된다.

 

 코드 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import functools
#가장 큰수
 
def cmp(a,b):
    t1 = a+b
    t2 = b+a
    if int(t1)>int(t2):
        return 1
    elif int(t1)<int(t2):
        return -1
    else :return 0
    
def solution(numbers):
    answer=''
    n=[str(x) for x in numbers]
    n = sorted(n,key=functools.cmp_to_key(cmp),reverse=True)
    if n[0]=='0' : return '0'
    for num in n:
        answer+=num
    return answer
cs

 

ariz1623