본문 바로가기
알고리즘/프로그래머스

프로그래머스 Lv2 가장 큰 수 도움말 (python)

by 개발하는 호랑이 2024. 2. 15.

가장 큰 수

풀이

어째 풀지 계속하다가 풀었다.
근데 하나가 계속 틀려서 보니 질문하기에서 테스트 케이스 한 개를 던져줘서 다행히 풀었다.
[0,0,0] 이면 "0" 이 나와야하는데 아무래도 "000"을 출력해서 그런가 보다.
그래서 모든 숫자가 0일 때 0을 반환하게 해 주었다.

def solution(numbers):
    # 모든 숫자가 0인지 확인
    if all(num == 0 for num in numbers):
        return "0"
    # 문자열로 변환
    numbers = list(map(str, numbers))
    # 두 숫자를 이어붙였을 때 큰 수가 되도록 정렬
    numbers.sort(key=lambda x: x*3, reverse=True)
    answer = ''.join(numbers)
    return answer

다른 사람 풀이

오 나랑 똑같은 풀이다. 근데 0에 대한 것은 없네? 했는데 return 할 때 int 해주고 str로 해줬다.
나도 이렇게 할 걸 멍청...

def solution(numbers):
    numbers = list(map(str, numbers))
    numbers.sort(key=lambda x: x*3, reverse=True)
    return str(int(''.join(numbers)))

아래와 같은 풀이도 있었다.
호오 신기하다. functools도 알아놔야지

import functools

def comparator(a,b):
    t1 = a+b
    t2 = b+a
    return (int(t1) > int(t2)) - (int(t1) < int(t2)) #  t1이 크다면 1  // t2가 크다면 -1  //  같으면 0

def solution(numbers):
    n = [str(x) for x in numbers]
    n = sorted(n, key=functools.cmp_to_key(comparator),reverse=True)
    answer = str(int(''.join(n)))
    return answer