중앙값 개념

중앙값(영어: median)는 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미한다. 예를 들어 1, 2, 100의 세 값이 있을 때, 2가 가장 중앙에 있기 때문에 2가 중앙값이다.

값이 짝수개일 때에는 중앙값이 유일하지 않고 두 개가 될 수도 있다. 이 경우 그 두 값의 평균을 취한다. 예를 들어 1, 10, 90, 200 네 수의 중앙값은 10과 90의 평균인 50이 된다. – 출처: 위키백과(https://ko.wikipedia.org/wiki/%EC%A4%91%EC%95%99%EA%B0%92)

알고리즘

  1. 데이터 오름차순으로 정렬(sort함수)
  2. 짝수, 홀수 구분
  3. 홀수일 경우, [center-index] 구해서 Return
  4. 짝수일 경우, [center-index] + [center-index – 1] / 2해서 Return

Code

def get_median(a):
    a.sort()
    centerIndex = len(a) // 2 
    if len(a)% 2 == 1:
        return a[centerIndex ]
    return ((a[centerIndex - 1] + a[centerIndex ]) / 2)

효율적인 코드

-index를 이용해서 if문 없이 파이썬스타일로 바꿔보기

def get_median_v2(data):
    data = sorted(data)
 
    centerIndex = len(data)//2
    return (data[centerIndex ] + data[-centerIndex - 1])/2

설명

  1. sorted()함수를 이용해 오름차순 정렬한다 *sorted는 반환받을 변수가 필요
  2. centerIndex를 구한다
  3. -index를 이용해 한 줄로 return한다.
홀수일 경우
  • 홀수일 경우, -index가 index와 한 위치 어긋난다.
  • 따라서 -(index-1)을 하면 같은 위치의 요소를 지목하게 된다.
  • 두 수를 더하면 *2가 되므로 /2를 해도 같은 요소를 반환하게 된다.
짝수일 경우
  • 짝수일 경우, -index가 index의 위치가 일치한다.
  • 따라서 -(index-1)을 하면 index보다 한 위치 앞서가는 요소를 지목하게 된다.
  • 두 수를 더하고 /2를 하면 두 수의 평균을 반환하게 된다.

Leave a comment

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다