티스토리 뷰

728x90

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

 

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

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

programmers.co.kr

 

  • 해설 :

0 또는 양의 정수들이 담긴 배열이 주어졌을 때 각 원소들을 붙여 만들 수 있는 가장 큰 수를 출력하면 된다.

 

 

 

  • 풀이 :

모든 원소들을 이어 붙이기 위해 str 형태로 바꿔준 후 내림차순 정렬하고 앞에서부터 이어붙이면 된다. 여기서 핵심은 내림차순 정렬할 때 단순히 정렬하게 된다면 문제가 생긴다. 예를 들어,

 

9와 91 이라는 값이 있을 때, 단순히 내림차순으로 정렬한다면 91, 9의 순으로 정렬된다 (문자열 기준)

그러나 919보단 991이 더 큰 값이므로 이는 잘못된 정렬이다.

따라서, 모든 수의 값을 비교하는 범위를 똑같게 만들기 위해 key 값을 문자열에 * 3을 한 값으로 정렬하면 (숫자의 범위가 최대 1000이기 때문에 3자릿수만 맞춰주면 된다) 올바르게 정렬되고 이를 join하고 문자열의 형태로 다시 변환하여 출력하면 된다. 

 

 

 

1
2
3
4
def solution(num):
    num = list(map(str, num)) 
    num.sort(key = lambda x : x*3, reverse = True
    return str(int(''.join(num)))
cs
320x100
댓글
© 2022 WonSeok, All rights reserved