코딩테스트 | python/프로그래머스

[프로그래머스 | python] 가장 큰 수

iemxl 2024. 4. 4. 11:17

알고리즘 고득점 Kit > 정렬 > 체육복

 

 

가장 큰 수 Lv.1

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

[제한사항]
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.

 

 

첫 번째 풀이 :     33.3점

def solution(numbers):
    answer = ''
    for i in range(len(numbers)):
        numbers[i] = str(numbers[i])
    numbers.sort(reverse = True)
    for j in numbers:
        answer+=j
    return answer
  • [3,30,34] 가 있을 경우 ans = '34330' 이 가장 큰 수 인데 위의 코드로 할 경우, ans = '34303'이 된

 

 

 

 

두 번째 풀이:     100점

def solution(numbers):
    numbers = list(map(str, numbers))
    numbers.sort(key=lambda x: x*3, reverse=True)
    return str(int(''.join(numbers)))
  • map을 통해 str형으로 바꿀 수 있음
  • sort( key = lambda x : x*3)을 통해 3번째 자리수까지 비교 가능
  • int형으로 join해서 [0,0,0]인 경우, '000'이 아닌 0이 될 수 있도록 함
  • 다양한 함수를 쓰는 노력을 해야겠음