정렬 - 가장 큰 수 (Level 2)

jisu_log·2025년 4월 1일

알고리즘 문제풀이

목록 보기
11/105

functools 라이브러리의 cmp_to_key 를 사용하여 커스텀 정렬함수 만들어서 정렬하기
정렬 기준: A+B vs B+A 형식으로 비교
ex)
100 + 10 = "10010"
10 + 100 = "10100"
에서 "10100" > "10010"
-> 단순 자리수 확장으로는 이런 경우를 커버할 수 없음!

from functools import cmp_to_key

# 커스텀 비교 함수
def compare(a, b):
    # a와 b가 문자열로 입력되어야 함 주의!
    
    if a + b > b + a: # a가 앞에 오는게 더 큰 경우
        return -1 # a < b가 되어서 a가 b보다 앞으로 감
    elif a + b < b + a: # b가 앞에 오는게 더 큰 경우
        return 1 # a > b가 되어서 b가 a보다 앞으로 감
    else:
        return 0 # 같다 (순서 유지)
    

def solution(numbers):
    # sort하기 전 정수 -> 문자열로 변환
    numbers = list(map(str, numbers))
    
    # compare 함수(커스텀) 기준으로 정렬
    numbers.sort(key=cmp_to_key(compare))

    # 배열을 하나의 문자열로 만들기
    answer = ''.join(numbers) # join() 은 문자열로 이루어진 배열에만 사용 가능!
    
    # '000'이 될 경우 0 하나만 리턴하기
    if answer[0] == '0':
        return '0'
    
    return answer

0개의 댓글