최빈값구하기
최빈값 구하기
주어진 배열에서 빈도수가 가장 많은 원소를 출력, 최빈값이 2개 이상일 경우는 -1 출력
def solution(array):
# 딕셔너리를 사용해서 각 원소마다 빈도수를 구해준다.
# set을 사용하여 나타낼수도 있지만 효율적으로는 O(N)만 사용하는게 가장 좋을 것 같았다.
tmp_dict = {}
for i in array:
tmp_dict[i] = tmp_dict.get(i,0) + 1
# 원소와 빈도수를 각각의 리스트에 저장해준다.
keys_list = list(tmp_dict.keys())
values_list = list(tmp_dict.values())
# 최빈값이 여러개인지 확인 후 출력
if values_list.count(max(values_list)) > 1: return -1
else : return keys_list[values_list.index(max(values_list))]
a = [1,1,2,2,2,3,3,4]
b = [1,1,2,2]
print(solution(a))
print(solution(b))
2
-1
- 알고리즘
- 리스트를 딕셔너리형태로 변형하여 각 원소마다 빈도수를 구한다.
- dict get을 사용하여 초기화 및 빈도 증가
- 최대 빈도수가 겹치는 숫자가 있는지 확인하고 출력한다.
- count와 max를 사용해서 최대빈도수의 개수를 확인
- index를 사용하여 최대빈도수의 원소를 확인
- 리스트를 딕셔너리형태로 변형하여 각 원소마다 빈도수를 구한다.
- 추가 정보
풀이 추천 1등의 풀이에서는 내장함수 set을 사용하여 원소값의 중복을 제거하고 해당 원소를 하나씩 없애보면서 최빈값만 남을 때까지 반복한다. 최빈값의 중복이 있다면 마지막에 같이 없어져 array의 길이가 0이 되므로 -1을 출력해준다.
def solution(array): while len(array) != 0: for i, a in enumerate(set(array)): array.remove(a) if i == 0: return a return -1