이모저모
최빈값 문제(counter()) 본문
최빈값 관련 문제 관련 코드이다. 처음에는 최빈값이 아니라 최빈값의 횟수를 구하라는 것으로 이해하여 count를 사용한 것을 볼 수 있다. 문제를 다시 이해하고 코드를 덧붙이는 식으로 해결하여 코드가 약간 길다.
list에 count(), index() 함수를 사용하였고 max()라는 내장 함수를 사용하였다. index()의 경우 해당하는 값의 인덱스 중 제일 작은 인덱스를 return한다.
1. 내 풀이
def solution(array):
list_count = []
mode_list = []
array_set = list(set(array))
for val in array_set:
mode_list.append(val)
list_count.append(array.count(val))
mode = max(list_count)
if list_count.count(mode)>=2:
answer = -1
else:
# mode값에 해당하는 첫번째 원소의 index를 return한다.
answer = mode_list[list_count.index(mode)]
return answer
2. 괜찮은 풀이
다음은 풀이 중 괜찮은 코드이다. Counter를 처음 봐서 counter관련 코드도 넣었다. counter의 경우 각 원소가 몇 번 나왔는지 dict 형태로 return한다.
#Counter(["hi", "hey", "hi", "hi", "hello", "hey"])
# 결과: Counter({'hi': 3, 'hey': 2, 'hello': 1})
아래 코드는 데이터의 개수가 많은 순으로 정렬된 배열을 리턴하는 most_common() 메서드를 사용하였다.
from collections import Counter
def solution(array):
a = Counter(array).most_common(2)
if len(a) == 1:
return a[0][0]
if a[0][1] == a[1][1]:
return -1
return a[0][0]
def solution(array):
while len(array) != 0:
for i, a in enumerate(set(array)):
array.remove(a)
if i == 0: return a
return -1
'코딩공부 > 프로그래머스(파이썬)' 카테고리의 다른 글
과일장수 문제 (0) | 2024.03.09 |
---|---|
최소공배수, 최대공약수 (0) | 2024.03.09 |
배열 관련 method(.count()) (1) | 2024.02.29 |
무작위로 K개 수 뽑기 (1) | 2024.01.09 |
세개의 구분자 문제(split, join) (0) | 2024.01.09 |