CK week2 day2

BnDC·2021년 9월 28일
0

code Kata

목록 보기
7/22

🧨 문제

숫자로 이루어진 배열인 nums를 인자로 전달한다.
숫자중에서 과반수(majority, more than a half)가 넘은 숫자를 반환하라.

예를 들어,

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



🚩 문제에 대한 의견

과반이 넘은 숫자를 반환하라고 하는데, 결국 과반이 넘는 수의 후보는 가장 배열에 가장 많이 있는 수이다.

배열에 가장 많이 있는 수가 과반이 될 수도 있고, 안될 수도 있다. 근데 이 문제는 배열에 가장 많이 등장하는 수만 구해도 test case를 모두 통과하고, 심지어 가장 많이 등장하는 수가 과반이 안되도, 그 수를 반환해야 test case를 통과하는 참사가....

결국 문제는 배열에 가장 많이 존재하는 수를 구하는 문제로 바뀌어 버렸다는 것에 대한 아쉬움이 남는다.




🎯 내 풀이

def more_than_half(nums):
#step1
    result=int(0)
    cnt=int(0)
    set_nums = set(nums)

#step2
    for num in set_nums:
      if cnt < nums.count(num):
        cnt = nums.count(num)
        result = num
  
#step3
    if cnt <= len(nums)/2:
    	return print("과반수가 넘은 숫자 없음")

    return result
      

📍 step 1

과반이 넘는 수를 저장할 result,
숫자가 배열에 얼마나 들어 있는 지를 담아 비교할 cnt,
배열에 중복되지 않은 요소만 담을 set_nums를 선언한다.

def more_than_half(nums):
#step1
    result=int(0)
    cnt=int(0)
    set_nums = set(nums)

📍 step 2

def more_than_half(nums):
    #... ...#

#step2
    for num in set_nums:
      if cnt < nums.count(num):
        cnt = nums.count(num)
        result = num
  
    #... ...#

중복되지 않는 숫자들 로 구성된 set_nums를 돌면서, 가장 많이 등장하는 숫자를 result에, 그 수가 배열에 존재하는 횟수를 cnt에 대입한다.

📍 step 3

def more_than_half(nums):
    #... ...#
    
#step3
    if cnt <= len(nums)/2:
    	return print("과반수가 넘게 존재하는 숫자 없음")

    return result
      

가장 많이 존재하는 숫자가 과반이 넘는지 검사하고, 과반이 넘지 않으면 경고 문자를, 과반이 넘으면 그 값을 반환한다.

profile
“Life is C (Choice) between B (Birth) and D (Death).” - 인생은 B와 D사이의 C

0개의 댓글