대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
입력
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
출력
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
풀이
n = int(input())
for i in range(n):
answer = list(map(int,input().split()))
avg = sum(answer[1:])/answer[0]
cnt = 0
for j in answer[1:]:
if j > avg:
cnt +=1
#stdavg = cnt/answer[0] * 100
print(str('%.3f' % round(cnt/answer[0]*100, 3)) + '%')
느낀 점
무수한 실패의 흔적들.. 출력 값은 분명히 정답인데 백준 채점에서는 자꾸 틀렸다고 나왔다. 처음에는 round 함수를 사용해서 문제를 해결하려고 했는데 round함수를 이용하면 40.000이 40.0으로 출력되는 단점이 있어서 다른 방법으로 풀어야 한다는 것을 느꼈다. 이 문제는 format을 사용할 수 있느냐 없느냐를 구분하는 문제인 것 같다. format을 사용하여서 문제를 풀었는데 처음에는
stdavg = foramt(cnt/answer[0] % 100,'.3f')
print(f'{stdavg}%')
이런 코드로 정답을 출력했는데 계속 틀렸다고 해서 처음부터 다시 생각해보았다. 문제점 가운데 하나는 문자열로 출력을 해주지 않았다는 점이고 출력 부분의 각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다 를 고려하지 않아서 생긴 오답이었다고 생각한다 . % round함수를 이용하여서 셋째 소수점부터 반올림을 했고 문자열 뒤에 %를 붙여 정답처리를 받을 수 있었다.
'Algorithm' 카테고리의 다른 글
[BOJ/백준] 하노이 탑 이동순서 (0) | 2020.12.11 |
---|---|
[BOJ/백준] 2477번 별 찍기 - 10 (0) | 2020.12.11 |
[BOJ/백준] 8958번 OX퀴즈 (0) | 2020.12.11 |
[BOJ/백준] 1545번 평균 (0) | 2020.12.11 |
[BOJ/백준] 3052번 나머지 (0) | 2020.12.11 |