파이썬(python) 숫자중에서 과반수를 넘는 숫자를 반환하기

이정민·2021년 6월 2일
0

Code 문제

숫자로 이루어진 배열인 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


Code

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

Code 해석

리스트가 담긴 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값을 내보낸다.

여기서 테스트는 과반수를 뽑아라고 했기 때문에 리스트안에서 무조건 과반수인 숫자가 있다고 생각했고 그건 가장 많이 반복된 수라고 생각했기 때문에 이런 코드를 짰다.

profile
안녕하세요.

0개의 댓글