문제
리스트에 있는 숫자들의 최빈값을 구하는 프로그램을 만들어라.
[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으로 중복값을 제거할 수 도 있다.
'코딩테스트 연습' 카테고리의 다른 글
[파이썬] 숫자야구 게임 만들기 (0) | 2023.03.23 |
---|---|
[파이썬] 숫자에 1000단위 콤마 넣기(라이브러리 사용X) (0) | 2023.03.23 |
[파이썬] n진수 변환 / 재귀 (0) | 2023.03.22 |
[파이썬] 프로그래머스: 가장 큰 수 / 아스키코드 (0) | 2023.03.21 |
[파이썬] 프로그래머스: 셔틀버스 (0) | 2023.03.21 |