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

프로그래머스 최빈값 구하기 문제이며, 풀이는 파이썬 python으로 진행했습니다.
https://school.programmers.co.kr/learn/courses/30/lessons/120812

문제설명

최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.

제한사항

  • 0 < array의 길이 < 100
  • 0 <= array의 원소 < 1000

입출력 예

array result
[1, 2, 3, 3, 3, 4] 3
[1, 1, 2, 2] -1
[1] 1
  • 입출력 예 #2: 최빈값이 여러개 일때는 -1을 return
  • 입출력 예 #3: [1]에는 1만 있으므로 최빈값은 1

코드

def solution(array):
  count_n = dict()
  for num in set(array):
    cnt = array.count(num)
    if cnt in count_n:
      count_n[cnt].append(num)
    else:
      count_n[cnt] = [num]

  max_freq = max(count_n.keys())
  max_n = count_n[max_freq]

  if len(max_n) == 1:
    return max_n[0]
  else:
    return -1

솔루션

처음에는 0으로 채워진 빈 리스트를 만들고 카운트 횟수를 기록하려고 했는데 잘 풀리지 않아, 다른 분들의 풀이를 참고하여 dict과 set 자료형을 이용해서 작성하였다.

count_n를 빈 dict형으로 만든 다음 set(array)로 중복 제거한 num값의 빈도를 계산해서 count_n에 있으면 추가하고, 없으면 새로운 리스트로 초기화했다.

이후, max 함수를 사용해서 최대 빈도수와 목록을 구하고 목록의 길이가 1인 경우 -1을 return 하게 했다.

 

[참고] 다른 사람의 풀이

def solution(array):
    while len(array) != 0:
        for i, a in enumerate(set(array)):
            array.remove(a)
        if i == 0: return a
    return -1

가장 많은 좋아요를 받은 풀이인데 index,value 로 활용할 수 있는 enumerate을 이용해서 계산했다.