본문 바로가기
Algorithm/Programmers

[Algorithm] 프로그래머스 - 최빈값 구하기

by 홍월이_ 2023. 1. 10.

시작하며...

모든 알고리즘 문제 풀이는 제가 직접 짜서 정답을 맞춘 결과만을 공유합니다.

마지막 'More Solution'은 다른 정답자들 풀이 중 생각지 못했던 부분들이나 좋게 느껴진 풀이법 몇개를 가져와서 공유하였습니다.

 

[Level 0] 최빈값 구하기

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 설명

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


제한사항

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

입출력 예

입출력 예 설명

입출력 예 #1

  • [1, 2, 3, 3, 3, 4]에서 1은 1개 2는 1개 3은 3개 4는 1개로 최빈값은 3입니다.

입출력 예 #2

  • [1, 1, 2, 2]에서 1은 2개 2는 2개로 최빈값이 1, 2입니다. 최빈값이 여러 개이므로 -1을 return 합니다.

입출력 예 #3

  • [1]에는 1만 있으므로 최빈값은 1입니다.

 

My Solution

def solution(array):
    dic = {}
    for n in array:
        if n not in dic:
            dic[n] = 0
        dic[n] += 1
        
    cnt = list(dic.values())
    reversed_dic = dict(map(reversed, dic.items()))
    
    if cnt.count(max(cnt)) > 1:
        return -1
    else:
        return reversed_dic[max(cnt)]

리스트 배열의 최빈값을 구하는 문제

  • 주어진 배열의 각 원소들을 카운트 해줄수 있는 딕셔너리 dic 를 생성한다.
  • 배열의 전체 길이만큼 반복문을 돌면서 각각의 원소 n이 dic에 포함되어있지 않으면 dic[n] = 0 으로 초기화하여 생성하고 카운트를 + 1 해준다. 
  • 반복문을 다 돌고나면 각 원소들이 key로 횟수가 value로 주어지는 dic가 된다.
  • 등장 횟수인 dic.values() 만 가져와서 cnt라는 리스트에 담는다. 
  • 그리고 등장횟수인 value값으로 key를 찾기 위해서 reversed_dic 라는 변수를 만들어서 key와 value를 뒤집어서 만들어준다.
  • 등장 횟수 cnt의 max값을 count했을 때, 1보다 크다면 최빈값이 여러개라는 의미이므로 -1을 리턴한다.
  • 그렇지 않다면 max값의 count가 1개라는 의미이므로 reversed_dic[value] 으로 해당 key인 숫자를 찾아주면 된다.

 

댓글