ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 3월 29일 TIL - 최빈값 구하기
    TIL(Today I Learned) 2023. 3. 29. 23:22

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

     

    # 각 요소의 갯수 구하기
    # 가장 갯수가 많은 요소 구하기
    # 최빈값이 여러개면 -1 반환

     

    처음엔 max 함수를 이용하여 코드를 작성하고자 하였다.

    ! max 함수의 key 값 활용하기 !

    # max 함수의 설명
    max(iterable, *[, default=obj, key=func]) -> value
    max(arg1, arg2, *args, *[, key=func]) -> value
    
    # 기본형 : max(iterable) 
    # 응용형 : max(iterable1, iterable2, ...)
    # 매개변수 : 반복이 가능한 자료형
    # 반환형 : 매개변수로 들어온 인자 내부에서 제일 큰 값을 반환합니다.
    def solution(array):
    	answer = max(array, key = array.count)
        return answer

    하지만 이렇게 진행을 하게되면 최빈값이 여러개였을 때 -1값을 반환하지 못한다. 그래서 검색해본 결과 요소와 빈도수를 딕셔너리로 만든 후 값들을 비교하여 결과를 반환하는 방법이 있었다. 먼저 비어있는 딕셔너리 count를 만들어 준다. 그리고 반복문으로 리스트를 돌리면서 key 값에 리스트 요소가 value값에 빈도수가 들어갈 수 있게끔 코드를 작성해준다. 코드를 보면 리스트 요소가 count에 등록되어있지 않다면 {'key = i' : 'value=1'}이 되게끔 작성해 준다. 그렇지 않다면 요소의 value 값이 1씩 올라가 몇 개 있는지 셀수 있게 해준다. 

    이렇게 리스트의 요소와 빈도수로 이루어진 딕셔너리가 완성되었다면 딕셔너리를 내림차순으로 정렬해 비교하기 쉽게 만들어준다. 이때 .items()함수를 사용해 키와값의 튜플로 구성된 리스트로 바꿔준다.

    딕셔너리 요소가 1개를 초과한다면 앞에서 가장 큰 두개의 value 값을 비교해서 가장 큰 key 값을 뽑아내주면된다. value 값을 비교할때 앞에서 가장 큰 두개의 값이 같다면 최빈값이 두개이므로 -1을 반환하고 그렇지 않다면 제일 첫번째로 있는 리스트의 key값을 반환해 주면 된다. 만약 딕셔너리 요소가 1개 이하라면 바로 key 값을 반환해주면 코드는 완성된다.

    def solution(array):
    # 각 요소의 갯수 구하기
    # 가장 갯수가 많은 요소 구하기
    # 최빈값이 여러개면 -1 반환
        answer = 0
        count = {}
        for i in array:
            if i not in count:
                count[i] = 1
            else:
                count[i] += 1
                
        sorted_count = sorted(count.items(), reverse = True, key = lambda x:x[1])
        
        if len(sorted_count) > 1:
            if sorted_count[0][1] != sorted_count[1][1]:
                answer = sorted_count[0][0]
            else:
                return -1
        else:
            answer = sorted_count[0][0]
        return answer

    사실 이 코드를 익히면서 딕셔너리를 만드는 방법을 제대로 익히게 된것 같다. 또한 딕셔너리는 key값을 알고 있으면 바로 뽑아낼 수 있지만 알 수 없으면 뽑아낼 수 없기에 리스트로 변경하여 순서로 뽑아내야한다는 점도 다시금 새겼다. 지금 한문제를 푼다고 단번에 이해가 되면 정말 좋겠지만 여전히 꾸준한 연습이 필요한것같다. 이제 시작이니 지치지말고 적어도 하루 한 문제씩이라도 앞으로 배워나자!

    댓글

Designed by Tistory.