매일공부

[코딩테스트 python] 최빈값 구하기 본문

Programming/코딩테스트

[코딩테스트 python] 최빈값 구하기

aram 2023. 3. 27. 00:26

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

▲ 저작권 문제로 링크를 통해 확인

 

from collections import Counter

def solution(array):
    length = len(array)
    result = [a for a in array if (a>=0 and a<1000)]
    
    if len(result)==length and length>0 and length<100:
        cnt = Counter(array)
        mode_all = cnt.most_common()  # 자동으로 최빈값 순으로 정렬해줌
        mode_max = mode_all[0][1]	  # 그 중에서 가장 처음에 나오는 최빈값만 추출
        modes = [n[0] for n in mode_all if n[1] == mode_max]  # 그 최빈값이 하나인지 판단
        
        if len(modes) == 1:
            answer = modes[0]  # 하나일 경우  그 값을 반환
        else:
            answer = -1		   # 여러개인 경우 -1 반환

    return answer

Counter의 경우
리스트에 튜플로 최빈값을 함께 반환해 줌

(처음에는 sorted도 생각했지만 
빠르게 답이 나와야하는 코테 특성상
시간이 더 걸릴 것 같아서 라이브러리 사용)

 

마지막 modes에서 반복문을 사용할 필요 없이
첫번째 원소와 두번째 원소를 비교해서 반환하면 더 효율적일 것으로 예상했으나,
list 특성상 원소가 많으면 런타임 에러 발생.

(제한사항을 추가해서 그런 것 같은데, 코테에서는 굳이 제한사랑 조건을 안 해도 되는 걸까...?)

 

>> 다른 분 하신걸 봤는데
while + enumerate +set 조합이 가장 best 👍

확실히 다양한 내장 함수를 아는 것이 더 중요한 듯!

 

Comments