[Code Kata] 2st week-day2 def more_than_half(nums):

0

Code Kata

목록 보기
3/3
post-thumbnail

문제

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

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

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

예를 들어,

nums = [3,2,3]
return 3

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

Solution

def more_than_half(nums):
  count = dict()
  for i in nums:
    if i not in count:
      count[i] = 1
    else:
      count[i] += 1
  maxkey = max(count.keys(), key=lambda k : count[k])
  return maxkey

과반수가 넘는 숫자를 반환해주기 위해 일단 중복 갯수를 카운팅 해주어 dict에 넣어주었고

거기서 람다 식을 이용해서 가장큰 value의 key를 뽑아내었다.

예전에 중복 카운팅하던 문제를 풀어봤어서 도움이 되었고, 의외로 람다식에 대해 배울 수 있는 기회였다.

유일하게 빠르게 접근할 수 있었고 시간내에 잘 풀었던 문제였던거 같다.

Model Solution

def more_than_half(nums):
	majority_count = len(nums)//2
	for num in nums:
		count = sum(1 for elem in nums if elem == num)
		if count > majority_count:
			return num

모범답안은 일단 반으로 나눠 주요한 count를 설정 해놓은 점이 흥미로웠고 접근 법도 나름 신선했었다.

오히려 구지 딕셔너리 넣어서 그걸 다시 빼는거 보다 한번에 뽑아내는 과정이 신기하기도 했었다.

언제쯤 저렇게 간단하게 규칙을 찾아서 할 수 있을가 궁금하다 . 더구나 모범답안에서는 for if를 한 문장에 쓰는 법을 사용했는데 아직 저런 것은 익숙치 않지만 간단한 것은 저렇게 쓸수도 있겠구나 하는 점을 알게 되서 흥미로운 알고리즘 시간이었다.

profile
문과생 개발자되다

0개의 댓글