본문 바로가기
Algorithm_PYTHON

[프로그래머스_파이썬] 정렬_가장 큰 수

by 코리니덕 2021. 8. 25.

테케 통과, 시간초과 코드

- 아무래도 itertools를 사용해서 시간초과가 뜬 듯 하다.

- 문제에서 설명할 때, 배열 안에 있는 원소들 중 가장 큰 값을 구한다고 하니까 단순하게 itertools사용했음

- 정렬 카테고리에서 정렬을 쓰지 않았네

import itertools

def solution(numbers):
    
    strings = list(map(str, numbers))
    results = list(itertools.permutations(strings,len(numbers)))
    
    arr = []
    for result in results:
        s = ''
        for r in result:
            s += r
        arr.append(s)
    
    return max(arr)

 

다른 풀이1

def solution(numbers):
    
    strings = list(map(str, numbers))
    # numbers의 원소는 항상 1000이하 -> 3자리로 맞춰서 비교하기 위함
    # 문자열 정렬은 아스키코드를 기준으로 함
    strings.sort(key=lambda x: x*3, reverse=True)
    # '30', '3'의 순서
    
    # 배열에 있는 값을 하나로 합치는 함수
    # int로 변환했다가 다시 str로 변환하는 이유 : 뒤의 '000'을 처리하기 위함
    return str(int(''.join(strings)))

 

다른 풀이2

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

 

안풀다가 풀려고 하니까 더 어렵고 그렇네 ㅠㅡㅠ

분발하자!!