일기 대신 코드 슬쩍

[프로그래머스]Lv0. 최빈값 구하기 본문

코딩테스트/프로그래머스(Python)

[프로그래머스]Lv0. 최빈값 구하기

코코자 2023. 1. 25. 12:05

문제 설명

최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.

제한사항

  • 0 < array의 길이 < 100
  • 0 ≤ array의 원소 < 1000

풀이

def solution(array):
    answer = {}
    for i in array:
        if i in answer:
            answer[i] += 1
        else: 
            answer[i] = 1
    sorted_answer = sorted(answer.items(), reverse = True,key = lambda item:item[1])
    if len(sorted_answer) <= 1:
        mode = sorted_answer[0][0]
    else:
        if sorted_answer[0][1] == sorted_answer[1][1]:
            mode = -1
        else:
            mode = sorted_answer[0][0]
    return mode

가장 먼저 든 생각은 딕셔너리를 이용하는 것이었습니다. 먼저 {숫자:숫자의 개수}를 for문 if문을 활용해

(맨날 리스트 컴프리헨션 연습한다하고 까먹..음)

딕셔너리로 만들었습니다.

그 다음으로 만들어진 딕셔너리를 value값으로 내림차순 정렬하였습니다.

여기서 array에 원소가 0개이거나 1개인 경우, 밑 line 포함하여 실행했을때 list index out of range 오류가 발생하므로 그때의 경우를 추가하여 작성하였습니다.

또한, 최빈값이 같은 경우에는 -1을 출력해야 하므로 그 경우도 따로 추가하여 작성하였습니다.