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

일단 해볼게·2023년 1월 19일
0

프로그래머스

목록 보기
6/106

https://school.programmers.co.kr/learn/courses/30/lessons/42746?language=python3

def solution(numbers):
	# join을 위해 리스트 안 요소들 str로 변환 
    answer = list(map(str, numbers)) 
    
    # x*3을 하는 이유? -> num의 인수값이 1000 이하이므로 3자리수로 맞춘 뒤, 비교
    answer.sort(key = lambda x : x*3, reverse = True) 
    
    # '0011'처럼 표현된 값을 11로 바꾸기 위해 int, 문제의 요구사항을 맞추기 위해 str로 형변환
    return str(int(''.join(answer)))

<입출력 예시1 기준>
x 곱하기 3을 할 경우 666, 101010, 222의 첫번째 인덱스 값으로 비교한다. (6, 1, 2) 내림차순으로 정렬하면 6, 2, 10이 된다.
lambda식의 내림차순 정렬하는 시점에서 x * 3된 값으로 비교를 하지만, 실제 값에는 적용되지 않는다.

시간 초과난 풀이

permutations를 이용해 모든 경우의 수를 구하고 정렬 후 답을 구하려 했지만 numbers의 길이가 길고 리스트 안 요소가 많아 시간초과가 났다.

import itertools

def solution(numbers):
    numbers = list(map(str, numbers)) # join을 위해 리스트 안 요소들 str로 변환
    
    nPr = list(itertools.permutations(numbers, len(numbers))) # 모든 경우의 수 구하기 (조합)
    result = []
    
    for npr in nPr:
        result.append(''.join(npr))  

    answer = sorted(result)[-1]
    return answer

참고
https://huidea.tistory.com/4

profile
시도하고 More Do하는 백엔드 개발자입니다.

0개의 댓글