Algorithm- export frequent number in list

이주명·2021년 11월 28일
0

숫자로 이루어진 배열인 nums를 인자로 전달합니다.

숫자중에서 과반수(majority, more than a half)가 넘은 숫자를 반환해주세요.

예를 들어,

nums = [3,2,3]
return 3

nums = [2,2,1,1,1,2,2]
return 2
nums = [3,2,3]
return 3

nums = [2,2,1,1,1,2,2]
return 2

가정

nums 배열의 길이는 무조건 2 이상입니다.

방법1 : dictionary 사용

 def more_than_half(nums):
   my_dict = {} 
   result = 0
   for i in nums : 
     if my_dict.get(i) :
       my_dict[i] = my_dict[i] +1 
     else :
       my_dict[i] = 1
       if result < my_dict[i] :
         result = my_dict[i]

     if result >= len(nums)/2 :
       return result[result]

dictionary 를 사용해서 리스트안에 있는 요소를 key 그에 따른 반복되는 key의 갯수는 value 에 저장한다.

ex)

nums = [4,4,4,3,3]
my_dict = {
4 : 3
3 : 2
}

nums에 4라는 요소가 3개 있고 3이 2개 있다면 dictionary 들어가는 값은
4 -> 3 / 3 -> 2 가 된다.

이렇게 마지막에 가장 value값이 큰 key 값을 리턴 하면 정답!

방법 2 : max 함수

python에 내장되어 있는 함수 max() 를 사용하면 정말 간단하게 문제를 풀수 있다.


def more_than_half(nums):
  result = max(nums, key=nums.count)
  print(result)
  if nums.count(result) > len(nums)/2 :
    return result

max(nums, key= ?) 함수는 리스트안에 있는 값중 key값에 의거하여 가장 큰 값을 리턴한다.

함수를 사용하면 간단하게 풀수 있는 문제도 많지만 함수를 쓰지않고 어떻게 푸는지 도전해 보면 알고리즘 풀이에 도움이 될 것 같다. 하지만 만들어진 함수를 잘 이용하는 것도 실력이다!

profile
oh yeah

0개의 댓글