문제
난이도가 주어진 후 주어진 난이도의 개수에 앞 뒤 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)
'알고리즘' 카테고리의 다른 글
[백준 파이썬] 1991 트리순회 (0) | 2023.11.15 |
---|---|
[백준 파이썬] 11660 구간 합 구하기5 (0) | 2023.11.13 |
[백준 파이썬] 1238 파티 (1) | 2023.11.08 |
[백준 파이썬] 1167 트리의 지름 (0) | 2023.11.06 |
[백준 파이썬] 2096 내려가기 (0) | 2023.11.01 |