Code KATA | # 5

Jiwon Jung·2021년 1월 10일
0

Code KATA

목록 보기
5/7
post-thumbnail

문제

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

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

예를 들어,

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

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

가정

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

문제 접근 방식

문제의 중점 파악

  • 리스트 안에 존재하는 수들의 숫자를 count하고 저장한다.
  • 주어진 숫자 배열의 길이를 구하여 숫자를 count한 수들 중 절반 이상 존재하는 수를 구한다.

이 세가지에 대한 해결 방식으로

  • 같은 숫자가 존재하는지 확인, 같은 숫자가 존재한다면 존재하는 숫자가 for문으로 돌때마다 해당 숫자 키값의 value를 +1씩 업데이트
  • 존재하지 않는다면 혼자만 존재하는 1을 넣는다.
  • 인자 배열의 길이를 구하여 절반 길이를 구한다.
  • 숫자 key의 값이 절반을 넘으면 러턴한다.

나의 코드

def more_than_half(nums):
    count = {}
    for number in nums:
        if number in count:
            count[number] = count[number] + 1
        elif number not in count:
            count[number] = 1
      
    half_length = len(nums) // 2
    for each_digit in count:
        if  count[each_digit] > half_length:
            return each_digit

problem

숫자가 단순하기 때문에 가능했다는 점. 만약 배열의 갯수가 엄청나게 많으면 연산 과정의 부하가 매우 큼으로 효율적이지 않을 것 같다는 느낌이 들었다.

What I Learnt

Collections, Counter 함수

그렇기에 나온 Collections의 Counter 함수

from collections import Counter를 부르면 사용 가능하다.

이 함수를 사용하게 되면 해당 값에 요소들의 갯수를 딕서너리 형식으로 정리를해 준다.

이 얼마나 간편한가;;;;

공식문서를 통해 내장함수, 라이브러리, 매서드를 잘 찾아보면 더욱 효율적인 방법이 존재한다.

profile
Venire, Videre, Vincere

0개의 댓글