Level 2. 가장 큰 수

Pear_Mh·2021년 6월 21일
0

Programmers-Level 2.

목록 보기
12/40

12. 가장 큰 수

코딩테스트 연습 > 정렬 > 가장 큰 수
https://programmers.co.kr/learn/courses/30/lessons/42746


문제 설명

Input value

  • numbers = 0 또는 양의 정수 리스트

Process

  • 주어진 정수를 재배치하여 숫자를 만든다.

Output value

  • 만들어진 수 중 가장 큰 값을 문자열로 변환하여 return 한다.

제한 사항

  • numbers의 길이는 1 이상 100,000 이하입니다.

  • numbers의 원소는 0 이상 1,000 이하입니다.

  • 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.


문제 구상

시간 초과

  1. 원소의 문자열 변환 후

  2. permuation을 이용하여 모든 경우에 대해 리스트화 하고,

  3. ''join()을 이용한 후,

  4. max값을 구해보았지만..

효율성 측면에서 좋지 못해 실패!

#00
numbers = [6,10,2]
#01
from itertools import permutations
numbers = max(list(map(''.join,permutations(list(map(str,numbers)),len(numbers)))))

성공

  1. 제한 사항 2번에 근거하여, number의 원소가 1000 이하라는 것을 이용하여,

  2. 원소의 문자열 변환 후

numbers = list(map(str,numbers))
  1. 3번 반복된 원소를 기준으로 내림차순 정렬
numbers = ''.join(sorted(numbers,key=lambda i : i*3, reverse=True))
  1. 모든 값이 0 일 수 있으니, 정수화 한 후 다시 문자열 변환
numbers = str(int(numbers))

문제 풀이

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

# Code test
numbers = [6,10,2]
solution(numbers)
profile
Beyond the new era.

0개의 댓글

관련 채용 정보