Programming/SW Expert Academy
20210116 // 삼성 SW Expert 아카데미 // 1204
껨코
2021. 1. 16. 14:44
삼성 SW Expert 아카데미 1204번 "최빈수 구하기" 문제입니다.
from collections import Counter
def modefinder(nums):
c = Counter(nums)
order = c.most_common()
maximum = order[0][1]
modes = []
for num in order:
if num[1] == maximum:
modes.append(num[0])
return modes
TC = int(input())
for tc in range(1, TC+1):
N = int(input())
lst = list(map(int, input().split()))
modes_lst = modefinder(lst)
modes_lst.sort()
modes_lst.reverse()
print("#%s"%tc, modes_lst[0])
숫자들의 리스트를 입력받고 최빈수(가장 빈도가 많은 수)를 찾아서 출력하는 문제이다.
이 문제는 collections 모듈의 Counter 클래스를 사용하면 편한 문제다.
Counter 클래스의 most_common() 메서드는 받은 리스트를 딕셔너리 형태로 저장하여 가장 빈도가 높은 순서대로 정렬해주는 매서드이다.
예를 들어 "Hello world"를 Counter 클래스로 만들어서 most_common() 메서드를 호출하면
{'l': 3, 'o': 2, 'h': 1, 'e': 1, ' ': 1, 'w': 1, 'r': 1, 'd': 1}
같은 식으로 데이터를 추출할 수 있다.
이런 식으로 가장 빈도가 높은 숫자를 추출하여 modes_lst에 저장을 하면 1개 이상의 숫자가 들어갈 텐데
문제에서는 최빈수가 여러 개 일 때에는 가장 큰 점수를 출력하라고 나와있으므로 sort()와 reverse() 메서드를 사용하여 내림차순으로 정렬한 후에 modes_lst[0](가장 큰 수)를 출력하면 된다.