GitHub

https://github.com/Choidongjun0830

파이썬 알고리즘 문제 풀이

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

gogi masidda 2023. 11. 14. 23:17
  • 가장 큰 수
  • 문제 설명

    0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.

    예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.

    0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

def solution(numbers):
    answer = ''
    str_list = list(map(str, numbers))
    str_list.sort(key=lambda x: x*3,reverse=True)
    answer = str(int(''.join(str_list)))    
    return answer

'str_list.sort(key=lambda x: x*3,reverse=True)'

만약 입력이 (3, 30, 31)이면 x: x*3에 의해 (333, 303030, 313131)이 된다. 그래서 사전식으로 내림차순 정렬하면, (333, 313131, 303030)이 되므로 (3, 31, 30)으로 정렬되어 join하면 33130으로 가장 큰 수를 얻을 수 있다.

x: x*3에서 곱하기 3을 하는 이유는 numbers의 원소는 1000이하라서 한자리 수를 세번 붙여야 모든 다른 수들과 비교가 가능하기 때문이다.

참고한 글

https://yuna0125.tistory.com/145

 

[프로그래머스 Lv.2][정렬] 가장 큰 수 (python)

문제 설명 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중

yuna0125.tistory.com

 

다른 사람의 코드

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

comparator로 연결시킨 숫자들을 비교하여 정렬한다. 

functools.cmp_to_key는 함수를 key로 사용할 수 있게 바꾸어 준다.

이 방법이 더 깔끔한 방법같다.

 

728x90