본문 바로가기
Algorithm

[구현/수학] 백준 18110 solved.ac - 파이썬(Python)

by jangThang 2023. 7. 24.
반응형

백준 온라인 저지

 

[ Contents ]

     

     

    1. 문제 (링크 참조)

     

    18110번: solved.ac

    5명의 15%는 0.75명으로, 이를 반올림하면 1명이다. 따라서 solved.ac는 가장 높은 난이도 의견과 가장 낮은 난이도 의견을 하나씩 제외하고, {5, 5, 7}에 대한 평균으로 문제 난이도를 결정한다.

    www.acmicpc.net

     

     

    2. 문제 풀이

     30% 절사평균을 사용하여 solved.ac의 난이도를 산출합니다.

     

    자료의 총 개수에서 상위 n%, 하위 n%를 제거한 평균

     

    절사평균은 극단적인 표본을 제거하기 위해 상하위 n%를 제거한 후의 평균입니다. 평점이나 난이도를 매길 때, 극단적으로 높게 주거나 낮게 주는 사람들이 꽤 있죠...

     그런 사람들로 인해 평균이 왜곡되는 것을 막고자, 절사평균을 사용하기도 합니다. 사실 데이터 분석 분야에서는 이러한 이유 때문에 평균보다도 중간값을 더 선호하기도 합니다.

     

     

    3. 코드

    import sys
    input = sys.stdin.readline
    
    def round2(num): # 사사오입
        return int(num) + (1 if num - int(num) >= 0.5 else 0)
    
    # 입력
    n = int(input())
    ban = round2(n*0.15)
    
    if n == 0:
        print(0)
    else:
        score = []
        for _ in range(n):
            score.append(int(input()))
        score.sort()
        
        # 출력
        res = 0
        for i in range(ban, n-ban):
            res += score[i]
        res = res/(n-2*ban)
        print(round2(res))

     여기서 주의할 점은 'round' 내장함수를 그대로 사용하면 안된다는 점입니다.

     

    print(round(1.5)) # 2
    print(round(2.5)) # 2
    print(round(3.5)) # 4

     round함수는 저희가 통상적으로 알고 있는 사사오입 반올림이 아닙니다.

     일명 5사5입으로 반올림 자리가 5일 때 앞자리가 홀수이면 올림, 짝수이면 내림합니다.

     따라서 4사5입 반올림 함수를 따로 정의해서 사용해야 합니다.

     

     

    star가 되고나서 Tistory

    반응형

    댓글