티스토리 뷰
728x90
https://programmers.co.kr/learn/courses/30/lessons/42746
- 해설 :
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
'Algorithm > Sorting' 카테고리의 다른 글
(Python) - BOJ(11650번) : 좌표 정렬하기 (0) | 2022.02.07 |
---|---|
(C++) - BOJ(10989번) : 수 정렬하기 3 (0) | 2022.02.06 |
(Python) - BOJ(10814번) : 나이순 정렬 (0) | 2022.02.04 |
(Python) - BOJ(2751번) : 수 정렬하기 2 (0) | 2022.02.01 |
(Python) - BOJ(1181번) : 단어 정렬 (0) | 2022.01.26 |
댓글
© 2022 WonSeok, All rights reserved