cording test

LV.0 : ["최빈값 구하기"]

JM Lee 2023. 3. 29. 12:44
728x90

입출력의 예시처럼 나오는 방법이 정말 다양하게 있는데, 그것을 어떻게 처리하면 좋을지 고민했다.

때마침, 수업시간에 배운 함수들 중 set 함수가 생각이 났지만 어떻게 이용하면 좋을까?

 

그 방법은 개수가 적은 숫자들을 제거하는 것이다.

하나씩 제거해나가면 결국에는 최빈값만 남을 것이라고 나름의 역발상을 해보았다.

 

아래의 주석에 설명글을 써놓았기 때문에 주석을 참고하면서 보시면 이해가 빠를 것이다.

def solution(array):
    # 시작할 때 array는 0이 될 수 없음을 이용
    while len(array) != 0:
        # set를 이용함
        for i, a in enumerate(set(array)):
            # 배열에 있는 a들을 하나씩 소거
            # [1, 1, 2, 3, 3, 3, 4] >> [1, 3, 3, 4] >> [3]
            array.remove(a)
        # a가 하나만 남을 경우 i는 0이 되므로 다음 식 성립
        # set 안에 a가 여러 개 있든 상관 없음. set([n, n]) = (n)
        if i == 0: return a
    # 그러나 최빈값이 동률인 것들이 있을 경우, 결국 len(array)는 0이 되기 때문에
    # 위 과정을 끝까지 거치지 않고 바로 return -1로 이동
    return -1

이렇게 해결하신 분들도 많다.

def solution(array):
    answer = 0
    check = {}
    for ar in array:
        if ar not in check:
            check[ar] = 1
        else:
            check[ar] += 1
            
    sorted_check = sorted(check.items(), reverse=True, key=lambda item: item[1])
    if len(sorted_check) > 1: 
        if sorted_check[0][1] != sorted_check[1][1]:
            answer = sorted_check[0][0]
        else:
            answer = -1
    else:
        answer = sorted_check[0][0]
    
    return answer

이건 아직 이해를 잘 못하지만.. 알아내게 된다면 다시 끄적여보겠습니다

'cording test' 카테고리의 다른 글

LV.0 가위바위보  (0) 2023.04.07
LV.0 로그인 성공  (0) 2023.04.05
LV.0 숫자 찾기(enumerate, find 함수를 통한 해결)  (4) 2023.03.31
LV.0 배열의 유사도  (1) 2023.03.30
LV.0 : ["세균 증식"], ["OX 퀴즈"]  (2) 2023.03.22