/ PROGRAMING, PYTHON

최빈값구하기

최빈값 구하기

프로그래머스-최빈값구하기

주어진 배열에서 빈도수가 가장 많은 원소를 출력, 최빈값이 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