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 👍
확실히 다양한 내장 함수를 아는 것이 더 중요한 듯!