카테고리 없음

[Python] BOJ/백준 18110번 solved.ac

서채리 2021. 8. 22. 02:16

[문제]

https://www.acmicpc.net/problem/18110

 

18110번: solved.ac

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

www.acmicpc.net

 


[풀이]

백준 게시판에서 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))