문제

대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.


입력

첫째 줄에는 테스트 케이스의 개수 C가 주어진다.

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


출력

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

 


접근법

  1. 테스트 케이스의 개수 입력 받기
  2. 이중리스트로 학생 수, 점수 입력 받기
  3. 평균 점수를 구한다.
  4. 평균 점수보다 높은 학생 수를 구한다.
  5. 평균 점수보다 높은 학생 수의 비율을 구한다.
  6. 소수점 셋째자리 반올림하여 출력한다.

코드

n = int(input())
a = [list(map(int,input().split())) for _ in range(n)]

for i in range(len(a)):
    sum_ = 0 # 총점
    num = 0 # 평균 점수보다 높은 학생의 수
    ratio = 0 # 평균 점수보다 높은 학생의 수의 비율
    
    for j in range(len(a[i])-1): # 총점 계산
        sum_ += a[i][j+1]
    mean = sum_/a[i][0] # 평균 계산
    
    for k in range(len(a[i])-1): # 평균 점수보다 높은 학생 수 계산
        if a[i][k+1] > mean:
            num+=1
    ratio = num/a[i][0] * 100 # 비율
    print(f'{ratio:.3f}%')

배운점

sum_, num, ratio를 for문 밖에서 만들어주면 숫자가 0으로 초기화되지 않으므로 출력이 누적해서 된다.

 

print(round(ratio, 3), '%')

위의 코드로 소수점 셋째짜리 까지 반올림한 값을 출력할 수 있다.

하지만 %가 한칸 띄어쓰기 한 채로 나오므로 아래처럼 반올림을 출력해준다.

print(f'{ratio:.3f}%')

 

복사했습니다!