[Lv2][프로그래머스]가장큰수(Sorting)

건너별·2021년 12월 10일
0

algorithm

목록 보기
14/27

Sorting 문제.

문제 풀기

🧐ideation

  • 51, 5, 57 이렇게 있으면 57, 5, 51 이렇게 배열해야 최대가 나옴.
  • 다시 말해, 두자리 숫자라면 둘째 자리 수가 앞자리 수보다 작을때는 뒤로 가는게 낫고, 그게 아니라면 앞으로 와야함.
  1. 위의 아이디어를 생각하지 않고 그냥 모든 경우의수를 고려하여 시간초과 뜬 코드.

from itertools import permutations

def solution(numbers): 
    return str(max([ int(''.join(list(map(lambda x : str(x),perm)))) for perm in permutations(numbers)]))
  1. 숫자가 1000 이하라는 조건을 이용한 풀이.

991, 9 가 있다면 9 가 먼저 올 수 있도록 991991991, 999 로 늘여서 비교.

def solution(numbers): 
    numbers=sorted([(str(num)*3, num) for num in numbers] ,key= lambda x : x[0], reverse = True)
    return ''.join([str(tup[1]) for tup in numbers])
  1. functool.cmp_to_key 를 이용한 풀이. 경이롭다.
  • a와 b는 각각 string type이므로 더하면 이어진다. 이것을 비교하는 거다.
  • 2번과 같은 번뜩이는 아이디어가 아니라 ideation에 의한 직관적인 풀이.
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
profile
romantic ai developer

0개의 댓글