[Level2] 가장 큰 수

Quesuemon·2021년 3월 28일
0

코딩테스트 준비

목록 보기
26/111

🛠 문제

https://programmers.co.kr/learn/courses/30/lessons/42746


👩🏻‍💻 해결 방법

numbers의 원소는 1000이하이기 때문에 세자리 수로 맞춘 뒤(x*3) 비교하여 문제를 해결할 수 있었다
문자열 비교는 아스키값으로 치환되어 정렬되기 때문에 큰 수부터 내림차순으로 정렬하였다
int로 변환한 뒤 다시 str을 해주는 이유는 모든 값이 0일때(000)를 처리하기 위함이다

소스 코드

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

💡 다른 사람의 풀이

functools.cmp_to_key(func) : 구식 비교 함수를 키 함수로 변환

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

0개의 댓글