2022-01-09 14:40:34 +09:00

61 lines
1.5 KiB
Python

def solution(l):
remain = sum(l) % 3
if remain == 0:
largest_number = get_largest_number(l)
return largest_number
(category_0, category_1, category_2) = split_digits_by_remain_of_three(l)
if remain == 1:
category_1, category_2 = remove_one_or_two_digits(category_1, category_2)
else:
category_2, category_1 = remove_one_or_two_digits(category_2, category_1)
if (category_1 == False) or (category_2 == False):
return 0
largest_number = get_largest_number(category_0 + category_1 + category_2)
return largest_number
def split_digits_by_remain_of_three(nums):
result = ([], [], [])
for n in nums:
result[n%3].append(n)
return result
def remove_one_or_two_digits(list1, list2):
if len(list1) >= 1:
return sorted(list1)[1:], list2
if len(list2) >= 2:
return list1, sorted(list2)[2:]
return False, False
def get_largest_number(nums):
if len(nums) == 0:
return 0
return int(''.join([str(x) for x in sorted(nums, reverse=True)]))
test_cases=[
[3, 1, 4, 1],
[3, 1, 4, 1, 5, 9],
[5, 5],
[0, 0, 9,9,9,9,9,9,9,9,7],
[0, 0, 0,0,0,0],
[0, 0, 0,0,0,0, 1, 1, 1],
[1],
[1, 1],
[1, 2],
[1, 1, 1],
[],
[0],
[1, 2, 3],
[1, 2, 3, 4],
[1, 2, 3, 4, 5],
[3, 3, 3, 0, 1, 1, 2, 2],
[3, 3, 3, 0, 1, 2, 2],
[3, 3, 3, 0, 1, 1, 2],
[1, 0, 0, 0],
[2, 0, 0, 0],
[3, 0, 0, 0, 6],
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
]
for test in test_cases:
print(test, solution(test))