코딩테스트 연습

[파이썬] 프로그래머스: 최빈값 구하기 / defaultdict

콩콩(๓° ˘ °๓)♡ 2023. 3. 22. 17:38

문제

리스트에 있는 숫자들의 최빈값을 구하는 프로그램을 만들어라.

[12, 17, 19, 17, 23] = 17
[26, 37, 26, 37, 91] = 26, 37
[28, 30, 32, 34, 144] = 없다

최빈값 : 자료의 값 중에서 가장 많이 나타난 값 
① 자료의 값이 모두 같거나 모두 다르면 최빈값은 없다.
② 자료의 값이 모두 다를 때, 도수가 가장 큰 값이 1개 이상 있으면 그 값은 모두 최빈값이다.

def solution(nums):
    dict={}
    for i in nums:
        if i not in dict:
            dict[i]=1
        else:
            dict[i]+=1
    
    if len(dict.keys())==1 | len(dict.keys())==len(nums):
        print('없다')
    else:
        for value, count in dict.items():
            if count == max(dict.values()):
                print(value)

풀이에서 가장 먼저 시행하는 for문으로 딕셔너리에 넣어서 같은 값 개수 세기는 defaultdict를 이용하여 다음과 같이 표현할 수 도 있다.

from collections import defaultdict
counts=defaultdict(int)
for k in [12, 17, 19, 17, 23]:
    counts[k]+=1

defaultdict에 value의 자료형을 지정하여 넣어주면 int는 0으로, list는 []로, set은 ()로 초기화되어 데이터가 들어갈 자리가 자동으로 세팅된다. 이를 활용해 같은 key값에 대해 value를 분리하는 동시에 set으로 중복값을 제거할 수 도 있다.

참고:https://dongdongfather.tistory.com/69