Code Wars 21 : Weight for weight

문제설명

My friend John and I are members of the "Fat to Fit Club (FFC)". John is worried because each month a list with the weights of members is published and each month he is the last on the list which means he is the heaviest.

I am the one who establishes the list so I told him: "Don't worry any more, I will modify the order of the list". It was decided to attribute a "weight" to numbers. The weight of a number will be from now on the sum of its digits.

For example 99 will have "weight" 18, 100 will have "weight" 1 so in the list 100 will come before 99.

Given a string with the weights of FFC members in normal order can you give this string ordered by "weights" of these numbers?

When two numbers have the same "weight", let us class them as if they were strings (alphabetical ordering) and not numbers:

180 is before 90 since, having the same "weight" (9), it comes before as a string.
All numbers in the list are positive numbers and the list can be empty.

요약
가중치에 따라 주어진 문자열 내부의 숫자들을 정렬해라. 가중치는 정수 하나에 구성되어있는 모든 숫자들의 합이다. (ex: 123 => 1+2+3 = 6)
만약 가중치가 같을 경우 문자열 오름차순 정렬 순으로 정렬해라.

제한사항

None

입출력 예시

"56 65 74 100 99 68 86 180 90" -> "100 180 90 56 65 74 68 86 99"

풀이

def order_weight(strng):
    return " " .join(sorted(sorted(strng.split(" ")), key=lambda x: sum(map(int, x))))

문자열 가공문제이므로 단계별 프로세스를 세우고 순서대로 적용하면 됩니다.
1. 문제에서는 문자열이 주어지므로 이를 split()을 통해 리스트화 시켜줘야 합니다.
2. 가중치가 같을 경우 문자열 오름차순 정렬이여야 하므로 미리 리스트를 sorted()로 정렬시켜줍니다.
3. 문제의 핵심인 가중치를 통한 정렬입니다. 숫자의 모든 자릿수의 합산(가중치)은 sum(map(int, x))을 통해 간단히 구할 수 있습니다. 이를 sortedkey를 통해 정렬해줍니다.
4. 정렬이 모두 끝났으니 다시 문자열 화 시켜줘야합니다. " ".join()을 써줍니다.

좋은 웹페이지 즐겨찾기