#  백준BOJ/Python : 4344번 평균은 넘겠지

- Author: @laetipark
- Published: 2023-06-29
- Updated: 2023-06-29
- Source: http://blex.me/@laetipark/%EB%B0%B1%EC%A4%80bojpython-4344%EB%B2%88-%ED%8F%89%EA%B7%A0%EC%9D%80-%EB%84%98%EA%B2%A0%EC%A7%80
- Tags: python, algorithm, 수학, 백준, boj, baekjoon, 사칙연산

---

## 평균은 넘겠지
- 시간 제한 : 1초
- 메모리 제한 : 256MB

[4344번 : 평균은 넘겠지 원본](https://www.acmicpc.net/problem/4344)

### 알고리즘 분류
- 수학
- 사칙연산

### 문제
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.

### 입력
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.

둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.

### 출력
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다. 정답과 출력값의 절대/상대 오차는 10^-3이하이면 정답이다.

### 풀이
1년 전에 풀었던 문제고, 평균 값을 구한 후 N명의 점수를 각각 확인해 평균을 넘는 개수를 구하는 방식으로 문제를 풀었다.
![](https://static.blex.me/images/content/2023/6/30/20236301_0oCmyozfeQ4N74wntDQu.png)
최근에 재채점 되었다길래 보았는데 맞은 문제가 틀렸다고 처리되어 어느 부분이 틀렸는지 알아보았다.

![](https://static.blex.me/images/content/2023/6/30/20236301_YBIS1JhaTybbZYD9s2cD.png)
![](https://static.blex.me/images/content/2023/6/30/20236301_A1Bx5jNBIAHXDKeAhFCU.png)
원인은 파이썬에서 `round(반올림) 함수`의 `오사오입(Round to Nearest Even)` 방식 때문이다. 보통 우리가 반올림을 하는 방식인 `사사오입(Round Off)`은, 5 이상이면 올리고 그 미만이면 내린다. `오사오입` 방식은 올리려는 수가 5인 경우 앞자리가 **홀수인 경우** 올리고 **짝수인 경우** 내린다.  
사진의 예시로 소수점 넷째 자리가 5일 때 셋째 자리가 2인 짝수이므로 내림 방식을 이용한 것이다.
그래서 소수점 넷째 자리가 존재할 경우 사사오입 방식으로 변환하는 코드를 작성해주었다.

### 소스 코드
##### Python
```python
case = int(input())

for _ in range(case):
    score = 0
    count = 0
    test = list(map(int, input().split()))
    score = int(sum(test) - test[0])
    avg = float(score / test[0])

    for j in range(1, len(test)):
        if (avg < test[j]):
            count += 1

    # 사사오입 방식으로 변환
    roundOff = 0
    if len(str(count / test[0])) > 7:
        if int(str(count / test[0])[6]) % 2 == 0:
            roundOff = 0.001

    print(f"{round(count / test[0] * 100, 3) + roundOff:.3f}%")
```
