Programming/CodingTest

[백준/python] 18110번 solved.ac

dev seon 2024. 6. 5. 16:06

1. 문제

이 문제는 주어진 문제의 난이도를 절사평균으로 구하는 문제다.

위아래 15%를 제외하고 평균을 계산하되, 정수가 아닌 경우 모두 반올림한다.

 

2. 풀이

<주요 개념>
python의 내장 함수 round는 사사오입이 아니다.
우리가 일반적으로 알고 있는 반올림은 사사오입.
4 이하는 버리고 5 이상은 올리는 반올림이다.
그러나 python의 round는 오사오입이다.
5 미만과 5 초과를 기준으로 버림과 내림을 실행한다.
5일 경우에는 짝수냐 홀수냐에 따라서 결과가 달라진다.
즉, 이 문제에서는 python의 내장함수 round를 사용해서는 안 된다.

<접근>
1. n을 입력 받아서 만약 0명일 경우 난이도 0을 출력한다.
2. 일반적인 반올림을 하기 위한 함수를 만든다.
3.  score을 입력 받고 절삭할 인원수를 반올림하여 찾는다.
4. 절삭한 점수를 인원으로 나누고 반올림하여 구한 평균을 출력한다.

 

3. 코드

import sys
input = sys.stdin.readline

def my_round(val):
    if val - int(val) >= 0.5:
        return int(val)+1
    else:
        return int(val)
    
n = int(input())
if n == 0:
    print(0)
else:
    scores = sorted([int(input()) for _ in range(n)])
    cut = my_round(n * 0.15)
    trimmed_scores = scores[cut:n - cut]
    result = my_round(sum(trimmed_scores) / len(trimmed_scores))
    print(result)

4. 느낀 점

파이썬의 반올림이 오사오입으로 동작한다는 것, 기억하자.