[백준 파이썬] 18110 solved.ac

 

 

18110번: solved.ac

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

www.acmicpc.net

문제

 

 

난이도가 주어진 후 주어진 난이도의 개수에 앞 뒤 15%의 개수는 자른 후 평균을 구하는 문제이다.


 

아이디어

15%를 자른 후 소수점은 반올림해야 하므로 간단하게 round함수를 사용하면 되겠다고 생각했다.

하지만 round함수를 사용하면 문제를 틀리게 된다! 그 이유는 파이썬 round함수의 사사오입 특성 때문이다.

 

사사오입은 5에서 반올림 할때, 앞자리 숫자가 홀수면 올림, 짝수면 내림을 한다.

즉 

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

print(round(3.5)) # 4 
print(round(4.5)) # 4

 

이런식의 결과가 나오는 것이다. 

우리가 알고있는 반올림(5에서는 올림)과는 다르기 때문에 반올림 함수를 새로 정의해야 했다.


풀이

def roundUp(a):
    return int(a)+1 if a-int(a) >= 0.5 else int(a)

다음과 같이 0.5에서는 올리는 roundUp함수를 정의하였다.

 

이후 풀이는 다음 코드와 같다.

n = int(input())
if n == 0:
    print(0)
else:
    level = [int(input()) for _ in range(n)]
    cut = roundUp(n*0.15)
    level.sort()
    b = level[cut: n-cut]
    average = roundUp(sum(b)/len(b))
    print(average)

입력받은 숫자들에 대해 앞 뒤 15%를 자른 후 평균을 구한다.


코드

import sys
input = sys.stdin.readline


def roundUp(a):
    return int(a)+1 if a-int(a) >= 0.5 else int(a)

n = int(input())
if n == 0:
    print(0)
else:
    level = [int(input()) for _ in range(n)]
    cut = roundUp(n*0.15)
    level.sort()
    b = level[cut: n-cut]
    average = roundUp(sum(b)/len(b))
    print(average)