728x90
문제
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
입력
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
출력
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
예제 입력
5
5 50 50 70 80 100
7 100 95 90 80 70 60 50
3 70 90 80
3 70 90 81
9 100 99 98 97 96 95 94 93 91
예제 출력
40.000%
57.143%
33.333%
66.667%
55.556%
1. 테스트 케이스 개수 C개 입력
C = int(input())
2. 입력한 C개의 케이스마다 학생수와 점수를 입력
- 입력한 숫자는 학생수(number[0])와 점수로 구성 e.g.) 5 10 20 30 40 50
for _ in range(C):
number = list(map(int, input().split()))
3. 입력한 학생수를 빼고 뒤에 점수만 남기는 리스트 생성하고 평균 계산
- del을 사용하여 0번째 인덱스인 학생수를 제거하고 나머지를 score라는 새로운 리스트에 저장
- 평균은 리스트의 전체 합을 리스트의 갯수(len(score))로 나누어 계산
del number[0]
score = number
avg = sum(score)/len(score)
4. 평균을 넘는 학생의 비율을 반올림하여 소수점 셋째 자리까지 출력
- 평균이 넘는 학생의 수를 저장할 리스트(above)를 생성
- for문을 사용하여 score 리스트에 있는 인자를 평균과 비교하여 평균보다 높으면 above에 저장
- 평균이 넘는 학생의 비율((len(above)/len(score))*100)을 계산하여 출력
above =[]
for i in score:
if i > avg :
above.append(i)
print(round((len(above)/len(score))*100,3),'%', sep='')
처음 코드는 위와 같이 작성하였으나 정답이 아니라고 나왔다. 계산은 맞지만 결과를 출력하는 과정에서 소수점이 0인 경우 셋째 자리까지 출력이 안되어 아래와 같이 수정하였더니 통과했다.
above =[]
for i in score:
if i > avg :
above.append(i)
rate = (len(above)/len(score))*100
print(f'{rate:.3f}%')
결과를 비교해보면 아래와 같다.
f{}%를 사용하면 0.000%이고 round를 사용하면 0.0%이다.
전체코드
C = int(input())
for _ in range(C):
number = list(map(int, input().split()))
del number[0]
score = number
avg = sum(score)/len(score)
above =[]
for i in score:
if i > avg :
above.append(i)
rate = (len(above)/len(score))*100
print(f'{rate:.3f}%')
728x90
'Programming > Python' 카테고리의 다른 글
[BAEKJOON_Python] 15596. 정수 N개의 합 (0) | 2022.03.12 |
---|---|
[BAEKJOON_Python] 8958. OX퀴즈 (0) | 2022.03.11 |