문제출처
https://www.acmicpc.net/problem/18110
문제회고
절삭평균이라는 개념을 이용해 알고리즘을 구현해야하는 문제였다. 엣지 케이스에 대한 연습과 파이썬의 round 함수의 작동원리를 배울 수 있게 되었다. 게다가 시간초과를 극복하기 위해 input 대신에 sys.stdin.readline을 써야했다.
round() 함수
반올림이란 수가 있을 때 5보다 작으면 내리고 5와 같거나 크다면 다음 자리에 1을 더하는 개념이다. 하지만 파이썬의 round 함수는 다르게 작동한다. 수가 5보다 작으면 내리고 5보다 클 때 올리는 것은 동일하다. 하지만 수가 5일 때 처리하는 방식이 반올림 개념과 다르다. 수가 5일 때는 앞자리가 홀수일 때 내리고 짝수일 때는 올린다.
문제접근
input함수와 round함수를 오버라이딩했다. 엣지케이스를 대응하기 위해 로직을 함수로 구현했다.
from sys import stdin
input = stdin.readline
n = int(input().strip())
def round(my_avg):
return int(my_avg) if my_avg - int(my_avg) < 0.5 else int(my_avg) + 1
def find_avg(n: int) -> int:
if n == 0:
return 0
notion = [int(input().strip()) for x in range(n)]
percent_15 = round(n * 15 / 100)
percent_30 = 2 * percent_15
notion.sort()
my_sum = 0
for i in range(percent_15, n - percent_15):
my_sum += notion[i]
return round(my_sum / (n - percent_30))
print(find_avg(n))
배운점
- 파이썬의 round 함수는 사사오입이다.
- 시간초과 방지를 위해 input 대신에 sys.stdin.readline을 사용하자.
- 엣지케이스를 조심하자.