Complete the method which returns the number which is most frequent in the given input array. If there is a tie for most frequent number, return the largest number among them.
주어진 배열에서 가장 빈도수가 높은 숫자를 return하는 함수를 만드시오. 만약 빈도수가 가장 높은 숫자가 두 개 이상이라면 그 중 가장 큰 숫자를 return 해야 합니다.
Note: no empty arrays will be given.
빈 리스트는 주어지지 않습니다.
[12, 10, 8, 12, 7, 6, 4, 10, 12] --> 12
[12, 10, 8, 12, 7, 6, 4, 10, 12, 10] --> 12
[12, 10, 8, 8, 3, 3, 3, 3, 2, 4, 10, 12, 10] --> 3
from collections import Counter
def highest_rank(arr):
most_common_list = Counter(arr).most_common()
return max(list(filter(lambda x : x[1] == most_common_list[0][1], most_common_list)), key=lambda x : x[0])[0]
[(12, 3), (10, 3), (14, 3), (8, 1), (7, 1), (6, 1), (4, 1)]
list(filter(lambda x : x[1] == most_common_list[0][1], most_common_list))
(14, 3)
이 추출되므로 [0]로 인덱싱하면 원하는 답이 추출됩니다.from collections import Counter
def highest_rank(arr):
if arr:
c = Counter(arr)
m = max(c.values())
return max(k for k,v in c.items() if v==m)
로직의 원리는 비슷하지만 훨씬 간결하게 풀이한 해법입니다. 🥳
def highest_rank(a):
b = set(a)
c = 0
for i in b:
d = a.count(i)
if d > c or (d == c and i > m):
c = d
m = i
return m
모듈도 없이 엄청나게 간단하고 명쾌하게 풀이한 해법이네요. 개인적으로 가장 맘에드는 방식입니다.