관리 메뉴

이모저모

최빈값 문제(counter()) 본문

코딩공부/프로그래머스(파이썬)

최빈값 문제(counter())

bhoon 2024. 3. 7. 00:19

최빈값 관련 문제 관련 코드이다. 처음에는 최빈값이 아니라 최빈값의 횟수를 구하라는 것으로 이해하여 count를 사용한 것을 볼 수 있다. 문제를 다시 이해하고 코드를 덧붙이는 식으로 해결하여 코드가 약간 길다. 

list에 count(), index() 함수를 사용하였고 max()라는 내장 함수를 사용하였다. index()의 경우 해당하는 값의 인덱스 중 제일 작은 인덱스를 return한다.

1. 내 풀이

def solution(array):
    list_count = []
    mode_list = []
    array_set = list(set(array))

    for val in array_set:
        mode_list.append(val)
        list_count.append(array.count(val))

    mode = max(list_count)

    if list_count.count(mode)>=2:
        answer = -1
    else:
        # mode값에 해당하는 첫번째 원소의 index를 return한다.
        answer = mode_list[list_count.index(mode)]
    return answer

 

2. 괜찮은 풀이

다음은 풀이 중 괜찮은 코드이다. Counter를 처음 봐서 counter관련 코드도 넣었다. counter의 경우 각 원소가 몇 번 나왔는지 dict 형태로 return한다.

#Counter(["hi", "hey", "hi", "hi", "hello", "hey"])
# 결과: Counter({'hi': 3, 'hey': 2, 'hello': 1})

아래 코드는 데이터의 개수가 많은 순으로 정렬된 배열을 리턴하는 most_common() 메서드를 사용하였다.

from collections import Counter

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

'코딩공부 > 프로그래머스(파이썬)' 카테고리의 다른 글

과일장수 문제  (0) 2024.03.09
최소공배수, 최대공약수  (0) 2024.03.09
배열 관련 method(.count())  (1) 2024.02.29
무작위로 K개 수 뽑기  (1) 2024.01.09
세개의 구분자 문제(split, join)  (0) 2024.01.09