문제
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
입력
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
출력
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
입출력 예
제출 코드
import sys
n = int(input())
for i in range(n):
lst = list(map(int, sys.stdin.readline().strip().split()))
avg = sum(lst[1:])/lst[0]
cnt = 0
for score in lst[1:]:
if score > avg:
cnt += 1
print('%.3f%%' % (cnt/lst[0]*100))
(1) line 4
입력값을 input().split()로 받지 않은 것은 N값이 학생 수가 1,000명까지 늘어날 수 있다는 입력 조건 때문이다. 입력의 개수가 너무 많아질 경우, 모듈 sys를 이용하여 readline을 활용하는 것이 더욱 효율적이다. 물론 1,000개 정도면 input()으로도 충분히 받아도 되긴 한다.
(2) line 5 ~ 9
학생들의 평균을 구하고, 평균을 넘는 학생의 수를 세기 위해 cnt를 선언해준다. 이후 학생의 수를 의미하는 lst[0]을 제외한 lst[1:]을 대상으로 각 점수를 순회하며 평균 점수보다 높은 점수일 경우 cnt를 1씩 증가시킨다.
(3) line 10
정답 비율이 낮은 편이라 도전 정신을 가지고 풀었는데, 난이도가 너무 쉬웠었다. 아마 이 부분이 정답 비율을 깎은 주요 원인이지 않을까 싶다. 항상 출력 조건을 잘 확인하자. 소수점 셋째 자리까지 출력해야 하므로 '%.3f'를 써줘야 하며, 문자열 내에 %를 쓰고 싶다면 %%를 써야 한다는 것을 잊지 말자.
Source : https://www.acmicpc.net/problem/4344
'PS > 백준' 카테고리의 다른 글
[백준 알고리즘][파이썬/Python] 1712번: 손익분기점 (0) | 2020.04.01 |
---|---|
[백준 알고리즘][파이썬/Python] 2941번: 크로아티아 알파벳 (0) | 2020.03.31 |
[백준 알고리즘][파이썬/Python] 1065번: 한수 (0) | 2020.03.30 |
[백준 알고리즘][파이썬/Python] 1157번: 단어 공부 (0) | 2020.03.28 |
[백준 알고리즘][파이썬/Python] 1152번: 단어의 개수 (0) | 2020.03.27 |