code-taka 10(more_than_half)

nichol·2022년 5월 22일
0

Algorithm & DataStructure

목록 보기
10/12

문제

숫자로 이루어진 배열인 nums를 인자로 전달합니다.
숫자중에서 과반수(majority, more than a half)가 넘은 숫자를 반환해주세요.

풀이

풀이1

  • 딕셔너리에 각 숫자들을 key값으로 그 숫자의 갯수를 value값으로 만든뒤 value값을 뽑아서 그중 가장큰 값을 찾고 가장 큰값을 value로 가지고있는 key값을 찾아서 반환한다.
def more_than_half(nums):
  a=[]
  dict={}
  for num in nums:
      if num in dict:
        dict[num] += 1   # 딕셔너리안에 key값이 있으면 value값을 하나씩 증가시킨다.
      else:
        dict[num] = 1
  
  for i in dict.values(): # value값을 뽑아낸다.
        a.append(i)
  b=max(a)                # value값들중 큰수를 담는다.
  return [k for k, v in dict.items() if v == b][0] # 담은 value값을 이용해 key값을 찾는다.

풀이2 두번의 for문을 하나로 줄여보자.

  • lambda를 이용하여 value값의 크기를 이용해 key값을 정렬한다.
  • 정렬 후 큰값을 찾는다.
def more_than_half(nums):
  a=[]
  dict={}
  for num in nums:
      if num in dict:
        dict[num] += 1   
      else:
        dict[num] = 1
  
  a = sorted(dict, key = lambda x : dict[x], reverse=True) 
  
  return a[0]

풀이3 collections모듈의 Counter클래스를 활용해보자.

from collections import Counter

def more_than_half(nums):

	dict = dict(Counter(nums))                          

	a = sorted(dict, key = lambda x : dict[x], reverse=True) 
 
    return a[0]
profile
WEB Developer

0개의 댓글