- 가장 큰 수
- 문제 설명
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
다른 사람의 코드
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
'파이썬 알고리즘 문제 풀이' 카테고리의 다른 글
[프로그래머스] 올바른 괄호 (0) | 2023.11.16 |
---|---|
[프로그래머스] 모의고사 (0) | 2023.11.16 |
[프로그래머스] K번째수 (0) | 2023.11.14 |
[프로그래머스] 같은 숫자는 싫어 (0) | 2023.11.14 |
Baekjoon Online Judge 1874번 파이썬 (0) | 2023.02.14 |