최빈값 구하기.python

Haks.·2024년 12월 13일
0

Study

목록 보기
10/65

문제 설명

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

제한사항

0 < array의 길이 < 100
0 ≤ array의 원소 < 1000
입출력 예

array	result
[1, 2, 3, 3, 3, 4]	3
[1, 1, 2, 2]	-1
[1]	1

풀이 과정

  1. 그 수가 몇개가 있는지 생성 => num
  2. 제일 많이 나오는 수가 동일한개 몇개인지 => check
  3. set 함수를 사용하여 비교할 값들 체크

내 코드

def solution(array):
	# 제일 많이 카운터 되는 수
	num = 0;
    # 그 수의 값
    answer = 0
    # 동일한 카운터가 몇번 있는지
    check = 0;
  
    # set 함수를 사용해 겹치지 않는 인자만 for 문
    for v in set(array):
        
        # 찾아서 num에 넣어
        if array.count(v) > num :
            num = array.count(v)
            answer = v # 해당 값
            check = 1
        elif array.count(v) == num:
            check += 1
    if check == 1 :
        return answer
    else : return -1

다른 풀이

  1. 시간 효율이 안좋아 새롭게 짰다.
def solution(array):
    count_dict = {}
    
    # 배열을 한 번만 순회하면서 각 숫자의 등장 횟수 기록
    for num in array:
        if num in count_dict:
            count_dict[num] += 1
        else:
            count_dict[num] = 1
    
    # 가장 많이 나온 숫자의 등장 횟수 찾기
    max_count = max(count_dict.values())
    
    # 가장 많이 나온 숫자가 여러 개 있으면 -1 반환
    most_frequent = [key for key, value in count_dict.items() if value == max_count]
    
    if len(most_frequent) > 1:
        return -1
    
    return most_frequent[0]
  1. 좀더 간략한 풀이
def solution(array):
count = [0] * (max(array)+1) # 숫자 출연 횟수를 셀 리스트

    for i in array:
        count[i] += 1

    m = 0 # 최빈값의 개수
    for c in count:
        if c == max(count):
            m += 1

    if m > 1: # 최빈값이 2개 이상이면 -1을 리턴
        return -1
    else: # 최빈값이 1개이면 해당 숫자를 리턴
        return count.index(max(count))

회고

[0] * (max(array+1) : 해당 배열의 최고 숫자까지 정해서, 모든 숫자를 비교하기 위해
이 방법으로 풀면 count.index(max(count))를 사용해 값을 찾아 낼 수 있다.

dict 형태의 풀이를 게속 기억하지 못하는 것 같다. 이런 벨류,숫자 를 비교하는 건 활용할 수 있다고 기억해 놓자

0개의 댓글

관련 채용 정보