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))
을 통해 간단히 구할 수 있습니다. 이를 sorted
와 key
를 통해 정렬해줍니다.
4. 정렬이 모두 끝났으니 다시 문자열 화 시켜줘야합니다. " ".join()
을 써줍니다.
Author And Source
이 문제에 관하여(Code Wars 21 : Weight for weight), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@keywookim/Code-Wars-21-Weight-for-weight저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)