최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
1. 0 < array의 길이 < 100
2. 0 ≤ array의 원소 < 1000
| array | result |
|---|---|
| [1, 2, 3, 3, 3, 4] | 3 |
| [1, 1, 2, 2] | -1 |
| [1] | 1 |
입출력 예 #1
입출력 예 #2
입출력 예 #3
※ 공지 - 2022년 10월 17일 제한 사항 및 테스트케이스가 수정되었습니다.
def solution(array):
dic = dict.fromkeys(array, 0)
#array에 해당하는 key의 초기 value값을 0로 지정
for x in array:
dic[x] += 1
#value값을 1씩 증가시킴
a = list(dic.values()).sort()
convert_dic = {v:k for k,v in dic.items()}
#key-value값을 바꾼 dictionary
if a[-1] == a[-2]:
return -1
else:
return convert_dic[a[-1]]
▶ 만약에 array가 [1]처럼 한자리만 존재하는 list일 경우
a[-1] == a[-2]에서 a[-2]가 존재하지 않으므로
TypeError: 'NoneType' object is not subscriptable 에러가 발생
def solution(array):
dic = dict.fromkeys(array, 0)
#array에 해당하는 key의 초기 value값을 0로 지정
for x in array:
dic[x] += 1
#value값을 1씩 증가시킴
a = sorted(list(dic.values()))
convert_dic = {v:k for k,v in dic.items()}
#key-value값을 바꾼 dictionary
if len(a) == 1:
return a[0]
if a[-1] == a[-2]:
return -1
else:
return convert_dic[a[-1]]
▶ 테스트 9와 10만 실패
-> if len(a) == 1: return a[0]
여기에서 내가 구해야하는 것은 dic의 key값인데, return하는 a는 dic의 value값, 따라서 len(dic.item())이 1 인 반례에 한해서 오류가 발생한 것 !!!
def solution(array):
dic = dict.fromkeys(array, 0)
#array에 해당하는 key의 초기 value값을 0로 지정
for x in array:
dic[x] += 1
#value값을 1씩 증가시킴
a = sorted(list(dic.values()))
convert_dic = {v:k for k,v in dic.items()}
#key-value값을 바꾼 dictionary
if len(a) == 1:
#배열안의 숫자의 종류가 1개일 때
return convert_dic[a[0]]
else:
#배열안의 숫자의 종류가 2개 이상일때
if a[-1] == a[-2]:
#최빈값의 개수가 2개 이상일때
return -1
else:
#최빈값의 개수가 1개일때
return convert_dic[a[-1]]
def solution(array):
dic = dict.fromkeys(array, 0)
#array에 해당하는 key의 초기 value값을 0로 지정
for x in array:
dic[x] += 1
#value
answer = []
for i in dic.items():
if i[1] == max(dic.values()):
answer.append(i[0])
return answer[0] if len(answer) == 1 else -1
이건 진만오빠가 풀어준 코드 ,,, 여기선 for문을 사용해서 dic안의 item을 하나하나 가져오면서 item의 value값을 max(dic.values())와 같을 경우 answer라는 빈 list안에 append
answer이라는 리스트의 길이가 1이면 answer[0]을 반환, 길이가 2이상일 경우 -1을 반환하는 코드 !!
-> 나는 for문을 쓰기 싫어서 이중 if문을 사용해 반례 여러가지를 넣어주었는데 이럴땐 그냥 for문 쓰는 것도 나쁘지 않은 듯 ...^^