숫자로 이루어진 배열인 nums를 인자로 전달합니다.
숫자중에서 과반수(majority, more than a half)가 넘은 숫자를 반환해주세요.
가정 - nums배열의 길이는 무조건 2 이상입니다.
ex) nums = [2,2,2,2,4,3,1] return 2
ex) nums = [1,4,2,4,4,4,8,4] return 4
ex) nums = [1,2,1] return 1
def more_than_half(nums):
new_nums = {}
for num in nums:
try: new_nums[num] += 1
except: new_nums[num] = 1
new_nums = sorted(new_nums.items(), key=lambda x: x[1], reverse=True)
return new_nums[0][0]
nums = [1,3,2,2,2]
print(more_than_half(nums))
결과 값 2
리스트가 담긴 nums변수를 반복문for문을 돌린다.
처음 try문에서 new_nums[num] = new_nums[num] + 1의 의미는 new_nums[num]의 value값에 1을 더해서 다시 key,value로 저장시킨다.
처음에는 당연히 비어있는 dict이기 때문에 try문에 의해 except문으로 넘어간다. 그래서 value가 1인 key가 생긴다.
여기서 그 숫자가 몇번 나왔는지 알 수 있게 해준다.
이후 정렬을 통해 value가 가장 큰 값을 제일 앞으로 정렬시켜서 return으로 key값을 내보낸다.
여기서 테스트는 과반수를 뽑아라고 했기 때문에 리스트안에서 무조건 과반수인 숫자가 있다고 생각했고 그건 가장 많이 반복된 수라고 생각했기 때문에 이런 코드를 짰다.