< 백준 4344> ✅






입력 : 
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 <= N <= 1000, N은 정수)이 첫 수로 주어지고, 이어서 명의 점수가 주어진다. 점수는 0보다 크거나 같고 100보다 작거나 같은 정수다.

출력 : 
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.





< 틀렸다는데 왜 틀렸는지 모르겠는 내 코드 > 


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
C = int(input())

for i in range(C):
    score = list(map(int, input().split()))
    cnt = 0
    avg = sum(score[1::]) / score[0]
    for s in score[1:]:
        if s > avg:
            cnt += 1
            output = (cnt/score[0]) * 100
    print('%.3f' % output + "%")


주피터 노트북에서 돌렸을 때는 출력값을 제대로 돌려주는데도, 즉 제대로 작동하는 코드가 맞는데도 채점 결과는 계속 '틀렸습니다'이다....

도대체 왜...?!?!?!





< 이제야 알겠어서 맞춘 내 코드 > 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
C = int(input())

for i in range(C):
    score = list(map(int, input().split()))
    cnt = 0
    avg = sum(score[1::]) / score[0]
    for s in score[1:]:
        if s > avg:
            cnt += 1
    print(str('%.3f' % round(cnt / score[0] * 100, 3)) + '%')

처음 코드에서 틀린 부분은
문제 중 '각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.' 에서

'반올림하여'를 빼먹어서였다.
반올림도 하고, 출력할 때 소수점 셋째 자리까지도 설정해줘야 한다.

round( 반올림 대상이 되는 숫자, n) 을 해주면 반올림해서 n자리까지 보여준다.