차곡차곡 쌓아보는 개발 데이터_AI/ML engineer
[프로그래머스/programmers] 코딩테스트 연습 - 최빈값 구하기 파이썬(Python) 풀이 본문
문제 설명
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
제한사항
- 0 < array의 길이 < 100
- 0 ≤ array의 원소 < 1000
입출력 예
array | result |
[1, 2, 3, 3, 3, 4] | 3 |
[1, 1, 2, 2] | -1 |
[1] | 1 |
소스 코드
from collections import Counter
def solution(array):
cnt = Counter(array)
result = cnt.most_common()
if len(result) > 1 and result[0][1] == result[1][1]:
return -1
else:
return result[0][0]
풀이
Counter 라이브러리를 사용해 쉽게 해결했다. 먼저 array 안의 원소들의 빈도 수를 세준 후에 most_common()함수를 사용해서 내림차순으로 정렬 후 리스트 안의 튜플 형태로 변형해주었다. ex) [(1, 2), (2, 2)] (Counter 만 사용해도 내림차순 정렬은 알아서 되는 것 같다.)
첫 번째 원소의 빈도 수와 두 번째 원소의 빈도 수를 비교해서 같게되면 최빈값이 여러 개이므로 -1을 리턴한다. 이 때, 원소의 수가 1인 경우를 고려해서 1보다 큰 경우만 비교할 수 있게 조건에 추가해주면 끝이다.
최빈값이 하나인 경우에는 바로 [0][0]을 참조하여 리턴해준다.
마무리
Counter 라이브러리를 잘 참조해서 사용할 줄만 알면 풀 수 있는 문제였다. array 안에 원소가 하나인 경우가 테스트 케이스에 존재하지 않았다면 히든 케이스에서 조금 헤맸을지도 ?
'알고리즘' 카테고리의 다른 글
[프로그래머스/programmers] 코딩테스트 연습 - 문자열 밀기 파이썬(Python) 풀이 (0) | 2022.11.30 |
---|---|
[구현] 시뮬레이션, 완전탐색 -이코테, 이것이 코딩 테스트다 (1) | 2022.11.26 |
[알고리즘] 시간복잡도, 공간복잡도 알아보기 (2) | 2022.11.26 |