CodeKata 2-2

chaerin·2021년 2월 2일
0

CodeKata

목록 보기
2/4

과반수인 숫자 반환하기

문제

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

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

예를 들어,

nums = [3,2,3]
return 3

nums = [2,2,1,1,1,2,2]
return 2
  • 가정
    nums 배열의 길이는 무조건 2개 이상

풀이

딕셔너리 형태로 {'숫자': '배열안에 존재하는 개수'} 만들기

1. 빈 딕셔너리를 하나 만들어 놓는다.

result={}

2. for문을 사용하여 nums안에 들어 있는 숫자를 하나씩 불러온다.

for i in nums:

3. 딕셔너리 result 안에 불러온 숫자가 존재하는지 확인

존재하지 않는 경우

if i not in result:
    result[i] = 1

불러온 숫자 i 가 '키'가 되고, 처음 카운트 된 것이나 마찬가지므로 존재하는 개수를 1(값)로 하여 아래와 같이 되도록 한다.

{i: 1}

존재하는 경우

else:
    result[i] += 1

key가 i 인 값에 1을 더해준다.

4. 위의 과정으로 만들어진 딕셔너리의 값이 전체 숫자개수의 절반이상인지 확인

if result[i] > len(nums) / 2:
    return i

딕셔너리 result의 값이 절반이상이면 key인 해당숫자(i)를 반환한다.

+ 재현님의 의견 : 과반수인 숫자가 없을 시 없다고 알려주자!

for문이 끝나고도 반환되는 값이 없을 시 과반수인 숫자가 없는 것이므로 아래와 같은 텍스트를 반환하기로 했다.

return '과반수 없음'

총정리 코드

def more_than_half(nums):
  result={}
  for i in nums:
    if i not in result:
      result[i] = 1
    else:
      result[i] += 1
    if result[i] > len(nums) / 2:
      return i

  return '과반수 없음'

0개의 댓글