본문 바로가기
백준

[백준] 18110번 파이썬 (solved.ac)

by 헤이즐넛 좋아하는 개발자 2024. 2. 24.

1. 문제와 예제

문제
예제


2. 전체 코드

import sys
input = sys.stdin.readline

# 입력 받기
n = int(input().rstrip()) # 난이도 의견의 개수
lst = [] # 난이도 의견 리스트

# 직접 정의한 반올림 함수
def my_round(val):
    if (val - int(val) >= 0.5):
        return int(val) + 1
    else:
        return int(val)

if n == 0: # 특수한 경우 먼저 처리
    print(0)
else:
    # 난이도 의견 리스트 만듦
    for _ in range(n):
        lst.append(int(input().rstrip()))

    lst.sort() # 정렬

    m = my_round(n * 0.15) # 위아래 각각 제외할 난이도 의견 수
    res = 0 # 계산한 문제 난이도

    for i in range(m, n-m):
        res += lst[i]

    # 결과 출력하기
    print(my_round(res / (n-2*m)))

3. 풀이

파이썬에 내장되어 있는 round 함수는 사사오입이 아닌 오사오입 반올림이다. 따라서 직접 round 함수를 정의해줘야 한다.

- 사사오입 : 4 미만의 숫자는 내리고 5 이상의 숫자는 올리는 방법

- 오사오입 : 5 미만의 숫자는 내림, 5 초과의 숫자는 올림하고, 반올림할 자릿수가 5일 때는 앞자리가 홀수이면 올림, 짝수이면 내림하는 방법

 

이 문제 자체가 특이한 문제인 것 같다. 이런 게 있다 정도만 알고 넘어가면 좋겠다.