문제풀이/정렬

* [파이썬] [정렬] Pro 가장 큰 수

승무_ 2022. 2. 14. 10:32

문제

https://programmers.co.kr/learn/courses/30/lessons/42746?language=python3 

 

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

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

programmers.co.kr

 

코드

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

 

생각 정리

int형의 list를 map을 사용하여 string으로 치환한 뒤, list로 변환한다. 
변환된 num을 sort()를 사용하여 key 조건에 맞게 정렬한다. 
lambda x : x*3은 num 인자 각각의 문자열을 3번 반복한다는 뜻이다. 
x*3을 하는 이유? -> num의 인수값이 1000 이하이므로 3자리수로 맞춘 뒤, 비교하겠다는 뜻.
이 문제의 핵심이라고 할 수 있다. 
문자열 비교는 ASCII 값으로 치환되어 정렬된다. 따라서 666, 101010, 222의 첫번째 인덱스 값으로 비교한다. 
6 = 86, 1 = 81, 2 = 82 이므로 6 > 2 > 1순으로 크다. 
sort()의 기본 정렬 기준은 오름차순이다. reverse = True 전의 sort된 결과값은 10, 2, 6이다. 
이를 reverse = True를 통해 내림차순 해주면 6,2,10이 된다. 이것을 ''.join(num)을 통해 문자열을 합쳐주면 된다. 
int로 변환한 뒤, 또 str로 변환해주는 이유?
모든 값이 0일 때(즉, '000'을 처리하기 위해) int로 변환한 뒤, 다시 str로 변환한다. 

'문제풀이 > 정렬' 카테고리의 다른 글

[파이썬] [정렬] Pro H-Index  (0) 2022.02.14
[파이썬] [정렬] 백준 2470 두용액  (0) 2022.01.18
[파이썬] [정렬] 개념 정리  (0) 2022.01.18