1 분 소요


중앙값을 구하는 절차는 최댓값, 최솟값을 구할 때 보다 더 복잡하다. 그래서 다양한 알고리즘들이 있다.

(평균값(mean)과는 다른 뜻이다. 중앙값(median)은 크기 순서대로 정렬했을 때 가장 중간에 위치하는 값을 뜻한다.)




세 정수를 입력받아 중앙값 구하기 1

def med3(a,b,c):  
    """a,b,c의 중앙값을 구하여 반환"""  
    if a>=b :  
        if b>=c :  
            return b  
        elif a<=c :  
            return a  
        else:  
            return c  
    elif a>c :  
        return a  
    elif b>c :  
        return c  
    else :  
        return b  

print('세 정수의 중앙값을 구합니다')  
a = int(input('정수 a의 값을 입력: '))  
b = int(input('정수 b의 값을 입력: '))  
c = int(input('정수 c의 값을 입력: '))  

print(f'중앙값은 {med3(a,b,c)}입니다.')




결과





세 정수를 입력받아 중앙값 구하기2


def med3(a,b,c) :  
    """ 세 정수를 입력받아 중앙값 구하기 """  
    if(b>=a and c<=a) or (b<=a and c>=a) :  
        return a  
    elif(a>b and c<b) or (a<b and c>b) :  
        return b  
    else :  
        return c  
print('세 정수의 중앙값을 구합니다')  
a = int(input('정수 a의 값을 입력: '))  
b = int(input('정수 b의 값을 입력: '))  
c = int(input('정수 c의 값을 입력: '))  

print(f'중앙값은 {med3(a,b,c)}입니다.')


위는 1번 코드보다는 효율이 좋지 않다. 하지만 결과는 같다.

이유는

 if(b>=a and c<=a) or (b<=a and c>=a) :  
        return a  
 elif(a>b and c<b) or (a<b and c>b) :  
        return b  

if(**b>=a** and c<=a) or (**b<=a** and c>=a)

이유는 바로 여기에 있다. 여기서 b>=a와 b<=a가 이루어진다. 근데 밑의 elif 문에서

 elif(a>b and c<b) or (a<b and c>b)

b>=a와 b<=a를 뒤집어 높은 a>b를 수행한다.

if 문의 조건식이 성립하지 않으면 굳이 elif문은 이 판단을 수행할 필요가 없다.

위에서 a와 b의 비교가 끝났는데 elif문에서 한번 더 비교를 하는 격이다.

출처 : 자료구조와 함께 배우는 알고리즘 입문 파이썬편

댓글남기기