문제
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
입력
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
출력
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
이 문제에선 평균이 넘는!! 학생들의 비율을 출력해야 합니다.(제가 처음에 이걸 발견 못해서 틀렸습니다...)
알고리즘의 구현 순서는 다음과 같습니다.
1. 테스트 케이스의 개수를 입력받고 그만큼 반복문을 돌린다.
2. 학생의 수와 점수를 입력받는다.
3. 학생들의 점수의 합을 구한다.
4. 점수의 합으로 평균을 계산한다.
5. 평균값으로 평균이 넘는 학생들의 수를 구한다.
6. 평균이 넘는 학생들의 비율을 구한다.
7. 2~6 테스트 케이스가 끝날 때까지 반복!
for _ in range(int(input())):
scores = list(map(int, input().split()))
sum = 0
for score in scores[1:]:
sum += score
avg = float(sum / scores[0])
avg_over = 0
for s in scores[1:]:
if s > avg:
avg_over += 1
print(f"{avg_over / scores[0] * 100:.3f}%")
scores에는 학생의 수와 학생들의 점수가 list형태로 들어가 있습니다. scores[1:]는 1 인덱스부터 마지막까지의 값으로 학생들의 점수이고, score[0]는 학생들의 수입니다. 마지막 출력에서 f스트링을 사용할 때 콜론을 사용하면 실수형의 소수점 자릿수를 정해줄 수 있습니다.
파이썬 내장 함수를 사용해서 조금 더 간결하게 쓸 수도 있습니다. 아래 코드는 점수의 합을 구하지 않고 한 번에 평균을 계산했습니다.
for _ in range(int(input())):
scores = list(map(int, input().split()))
avg = float( sum(scores[1:]) / scores[0] )
avg_over = 0
for s in scores[1:]:
if s > avg:
avg_over += 1
print(f"{avg_over / scores[0] * 100:.3f}%")
'개발 > 알고리즘' 카테고리의 다른 글
[BOJ(백준) 5622] 다이얼 - 파이썬의 switch와 딕셔너리 (0) | 2021.05.28 |
---|---|
[BOJ(백준) 4673] 셀프넘버 - 파이썬 풀이 (1) | 2021.05.24 |
[BOJ(백준) 10951] A+B - 4, 파이썬 문자열의 EOF (0) | 2021.05.23 |
[BOJ(백준) 1110] 더하기 사이클 - 파이썬 풀이 (0) | 2021.05.22 |
[BOJ(백준) 2753] 윤년 계산하기 - 파이썬 풀이 (0) | 2021.05.20 |