[프로그래머스] LEVEL0 최빈값 구하기 파이썬

그린·2023년 2월 17일
0

프로그래머스

목록 보기
8/28
post-thumbnail

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


✔️문제

✅문제 설명

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

✅제한사항

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

✔️풀이

🙋‍♀️내 풀이

def solution(array):
    answer = 0
    arr=[]
    count = {}
    for e in array:
        if e not in count :
            count[e] = 1
        else :
            count[e] += 1
    count = sorted(count.items(), key = lambda x : x[1], reverse = True)
    print(count)
    if len(count) > 1 and count[0][1] == count[1][1] :
        return -1
    else :
        return count[0][0]
  1. array에 들어있는 인수:인수가 나온 횟수를 딕셔너리를 이용해서 나타냈다.
  2. count 딕셔너리를 valuse값을 기준으로 내림차순으로 정렬했다.
  3. 가장 큰 값과 두번째 값이 같으면 -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
  1. set() 함수를 사용하여 array에 있는 인수의 중복을 제거하고,
    array의 길이가 0이 아닐동안 인수를 계속해서 제거한다.
  2. 반복문이 종료된 후, enumerate() 함수를 사용하여 알아낸 제거된 인수의 인덱스 값이 0이라면 해당 인수가 최빈값이므로 해당 인수를 리턴해준다.
  3. 같은 횟수의 인수가 있다면, 길이가 0이 될 때 마지막으로 제거한 인수의 인덱스 값은 1 이상일테니, -1이 리턴된다.


    enumerate() 함수는 알고 있었지만, 위의 아이디어를 떠올리지 못했다.

👍오늘의 배운 점

딕셔너리뿐만 아니라 enumerate() 함수를 이용해서 최빈값을 알아낼 수 있다.

0개의 댓글