[문제]
https://www.acmicpc.net/problem/18110
[풀이]
백준 게시판에서 solvedac 계정을 발견했는데 유일하게 제출한 문제가 이거 한개라 궁금해서 풀어봤다.
왜케 쉬워?!?! 하고 풀었는데 런타임 에러가 나서 당황;;
파이썬 내장함수인 round가 생각보다 시간을 많이 잡아먹나보다
따라서 이번 문제는 round 함수를 직접 구현하는 문제이다.
그냥 반올림의 개념을 생각하면 쉽다. num의 소숫점 값이 0.5 이상인 경우에는 올림을 해주고, 그 이하일 경우 내림을 해준다. 소숫점 값을 어떻게 구하느냐? 이것은 원래 수에서 해당 수를 int()로 감싼 값을 빼면 소숫점을 구할 수 있다.
3.75를 예로 들면, 3.75 - 3 = 0.75 이런식으로!
+
문제를 풀고 나면 다른 사람들은 어떻게 풀었는지 궁금해 항상 검색을 해보는데 내가 정의한 함수를 굉장히 간단하게 한줄로 정의할 수 있어서 코드에 주석으로 첨부해놓았다. 굉장한 압축!!.. 다음에 사용할 일이 생기면 한번 써봐야겠다.
[코드]
import sys
def my_round(num):
if num - int(num) >= 0.5:
return int(num) + 1
else:
return int(num)
# == return int(num) + (1 if num - int(num) >= 0.5 else 0)
if __name__ == '__main__':
n = int(sys.stdin.readline())
if not n:
print(0)
else:
difficulty = [int(sys.stdin.readline()) for _ in range(n)]
difficulty.sort()
exception = my_round(n * 0.15)
if exception != 0:
difficulty = difficulty[exception: -exception]
cnt = n - 2 * exception
result = sum(difficulty)
print(my_round(result / cnt))