Today
Total
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
관리 메뉴

기억은 짧고 기록은 길다

[프로그래머스/Programmers] 가장 큰 수 - Python 본문

CodingTest/programmers

[프로그래머스/Programmers] 가장 큰 수 - Python

ukunV 2021. 9. 7. 16:34

Link

 

코딩테스트 연습 - 가장 큰 수

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

programmers.co.kr

 

Solution

해당 문제에서 sorted()의 기준으로 lambda x: x * 3을 사용한 이유는 num의 인수값이 1000이하 이므로 3자리수로 맞춘 뒤 비교하기 위해 사용한 것이다.

문자열의 곱셈이기 때문에 ['111', '2', '6']인 경우 각각 '111111111', '222', '666'으로 연산이 이루어지고 문자열은 ASCII 코드 값으로 비교(첫번째 자리부터 순서대로 비교)가 되기 때문에 내림차순 정렬 시 '666', '222', '111111111'로 정렬이 이루어지게 된다.

마지막에 int로 변환한뒤 다시 str로 변환해주는 이유는 모든 값이 0일 때를 처리해주기 위해 사용한다.

Other Solution의 cmp_to_key()의 경우 첨부한 글을 참고바란다.

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

 

Other Solution

import functools

def comparator(a,b):
    t1 = a + b
    t2 = b + a
    return (int(t1) > int(t2)) - (int(t1) < int(t2))

def solution(numbers):
    n = [str(x) for x in numbers]
    n = sorted(n, key=functools.cmp_to_key(comparator),reverse=True)
    return str(int(''.join(n)))
🔑 key point: functools.cmp_to_key()

 

첨부

https://jeonzzang.tistory.com/48

https://docs.python.org/ko/3/howto/sorting.html

Comments