# 문제풀이
C = int(input())
ans = []
for _ in range(C) :
num_list = list(map(int, input().split()))
avg = sum(num_list[1:])/num_list[0]
cnt = 0
for score in num_list[1:]:
if score > avg:
cnt +=1
rate = cnt/num_list[0]*100
ans.append(rate)
for rate in ans :
print(format(rate,'.3f')+'%')
1. 케이스 수와 그 수만큼의 배열을 입력받는다.
- 입력받은 배열은 반복문을 돌리기 위해 리스트로 저장한다.
2. 점수들의 합계와 평균을 구한다.
- sum(num_list[1:]) : 배열의 [0]번째 인덱스 값에 위치한 수는 점수가 아닌 학생 수를 의미한다. 그 수를 제외하고 [1]번째 값부터 마지막 값까지를 더한 합을 구한다.
- 점수 합을 학생 수로 나누어 평균을 구한다.
3. 각 점수와 평균을 비교하여 평균 이상의 학생 수를 구한다.
- 점수가 평균 이상일 때마다 cnt를 하나씩 더해나간다.
4. 산출 값을 배열에 저장 후 한 줄씩 출력한다.
- 값이 한 줄씩 출력되더라도 답안으로 인정된다고 한다. 입력과 출력 모두 한 번에 여러 값을 해내고 싶어 배열과 for문을 이용하여 출력하였다.
- 소수점 셋째자리까지 표기하라는 조건에 따라 format함수를 이용하였다.
새롭게 알게 된 개념
- 입력한 수만큼의 input을 받는 방법을 새롭게 알게되었다. C의 값을 받은 뒤 range(C)로 for문을 돌려 배열을 입력받으면 된다.
- 여러 값을 한 번에 출력하기 위해 값들을 배열에 넣어 for문으로 출력하는 방법을 시도해보았다.
- round() 와 format(), 소수점 셋째자리까지 표시하기 위해 round함수를 사용했으나 표시할 숫자가 0인 경우 자동으로 숫자가 생략되어 버렸다. 반면 format()의 경우 표시할 숫자가 0일지라도 자리수를 맞춰준다.
- print 시 반점(,)으로 문자열을 이으면 중간에 공백이 들어간다. 출력 과정에서 '%'를 반점(,)으로 이어주어 답안 인정이 안되었다가 +를 이용하여 문자열을 이어주니 답안 인정이 되었다.
- 입력과 출력 방식의 디테일도 놓치지 말아야 함을 느낀다.
https://www.acmicpc.net/problem/4344