728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/120812
가장 많이 들어 있는 숫자를 리턴. 똑같이 많으면 -1 리턴
1. 딕셔너리 사용
딕셔너리 value로 sort()
딕셔너리의 .items() 이용
.items()를 다시 list로 바꾼다(튜플 형태로 리스트에 저장된다)
sort()를 사용한다. key = lambda x:x[1] 파라미터를 사용
def solution(array):
dic = {}
for i in set(array):
dic[i] = array.count(i)
#value가 큰 것부터 sort()
arr = list(dic.items())
arr.sort(key=lambda x:x[1], reverse = True)
#값이 하나밖에 없을 때
if len(arr) == 1:
return arr[0][0]
#최빈값이 같은 게 있는지 확인
if arr[0][1] != arr[1][1]:
return arr[0][0]
return -1
2. Counter 사용
Counter 객체 라이브러리
from collections import Counter
Counter 객체
각 원소가 몇 번씩 나오는지 세어 준다
Counter 객체 생성
new_counter = Counter(문자열 / 리스트)
Counter 객체 -> 딕셔너리
dict() 해주기
#Counter 객체
print(Counter([1,2,1,3,5,2,2,7])) #Counter({2: 3, 1: 2, 3: 1, 5: 1, 7: 1})
#딕셔너리
print(dict(Counter([1,2,1,3,5,2,2,7]))) #{1: 2, 2: 3, 3: 1, 5: 1, 7: 1}
Counter 내장 함수
.most_common() : 데이터의 개수가 많은 순으로 정렬
https://www.daleseo.com/python-collections-counter/
Counter 객체끼리
더하기 +
빼기 -
합집합 |
교집합 &
가능
from collections import Counter
def solution(array):
array = (Counter(array).most_common())
if len(array) == 1:
return array[0][0]
if array[0][1] == array[1][1]:
return -1
return array[0][0]