Coding - Algo/python

[프로그래머스] 가장 큰 수 (python 파이썬)

jainn 2021. 6. 22. 17:05
728x90

문제

https://programmers.co.kr/learn/courses/30/lessons/42746

 

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

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

programmers.co.kr

 

풀이 및 소스코드

처음에는 숫자들을 문자열으로 바꾼 뒤, 역순으로 정렬해서 풀려고 했으나,

[30, 3] 인 경우에는 330이 되어야 가장 큰 수가 되지만 위와 같은 방법으로 풀었을 때 303이 나와서 틀리게 된다.

 

따라서 *3을 해주어 숫자들을 3번씩 반복해서 아스키값 순으로 정렬될 수 있도록 해주면 된다.

[30, 3]을 *3 해주면 303030, 333이 되므로 우리가 원하는 대로 정렬이 된다.

문자열에 *n을 해주면 n번 반복한다는 걸 알게되서 뜻깊은 문제다. ㅋㅋㅋ 

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