"민중을 이끄는 자유의 여신" (외젠 들라크루아, 1830)
숫자로 이루어진 배열인 nums를 인자로 전달합니다.
숫자중에서 과반수(majority, more than a half)가 넘은 숫자를 반환해주세요.
예를 들어,
nums = [3,2,3]
return 3
nums = [2,2,1,1,1,2,2]
return 2
nums
배열의 길이는 무조건 2
이상입니다.
- 과반수(過半數)란, 말 그대로 배열 중에서 절반을 넘는 개수를 가진 숫자이다.
- 즉, 정렬을 하고 절반에 위치한 인덱스를 뽑으면 그 숫자는 무조건 과반수이다.
- 해당 배열(리스트)을
sort
를 이용하여 오름차순으로 정렬한 다음,- 배열의 절반에 해당하는 인덱스를 반환한다.
def more_than_half(nums):
nums.sort()
return nums[len(nums)//2]
None
을 리턴할 수 있도록 알고리즘을 짜면 더 좋을 것 같다max()
를 활용하여 제일 개수가 많은 숫자를 반환하도록 알고리즘이 짜여져 있다.set
과 dictionary
를 활용해서 푼 것이 인상적이다.def more_than_half(nums):
half_check = {}
if len(nums) < 2:
return nums[0]
else:
count_nums = set(nums)
for i in count_nums:
half_check[i] = nums.count(i)
max_key = max(half_check, key=half_check.get)
return max_key
hashmap
은 처음 본다.collection
에 대한 추가적인 공부가 필요해 보인다.import collections
def more_than_half(nums):
counts = collections.Counter(nums)
return max(counts.keys(), key=counts.get)
nums
의 중복되지 않는 각 요소의 개수가 절반을 넘을 경우 a = []
for i in set(nums):
if nums.count(i) > len(nums)/2:
a.append(i)
return a[0]