문제
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
입력
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
출력
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
정답비율
37.931%
N = int(input())
for _ in range(N) :
case = list(map(int, input().split()))
n = case[0]
lst = case[1:]
avg = sum(lst)/n
count = 0
for i in range(n):
if lst[i] > avg :
count += 1
rnd = round(count/n*100,3)
print('%.3f%%' %rnd)
가장 먼저 for구문은 2개가 필요할 것이라고 생각하였다. 입력을 리스트로 받은 후 슬라이싱을 통해 0번째는 n으로, 나머지는 새 리스트로 바꿔주고 진행하였다.
그리고나서 평균을 구하고, count 변수에 평균보다 큰 수의 갯수를 넣도록 진행하였다.
평균을 넘는 학생들의 비율을 반올림하는 것까지는 위와 같이 진행하여 rnd변수에 쉽게 넣을 수 있었다. 그러나 소수점 셋째 자리까지 잘 나오나 싶다가도 소숫점이 애초에 셋째자리 미만인 숫자는 40.0 과 같이 첫째자리만 나왔다. 즉 예제출력에서의 40.000%가 나오지 않았다.
결국 소숫점을 원하는 자리까지 나오게 하는 방법을 찾아보았다. 이는 다음과 같다.
'%.3f' % N : N을 소숫점 셋째자리까지 표시
'%.3f%%' % N : N을 소숫점 셋째자리까지 표시하고 % 표시
%.숫자와 형식 을 작은따옴표에 넣고 % 숫자or문자 를 통해 연결시켜줄 수 있다는 것을 알게 되었다. 따옴표는 출력을 위해 print구문 속에 넣어준 것이다. 형식에는 s(문자열), d(정수형), f(실수형) 을 넣을 수 있다. 만약 1이라는 숫자를 3d와같이 표현하게 되면 003 을 표현할 수 있다.
참고
4344번: 평균은 넘겠지
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
www.acmicpc.net
'Problem Solving > Baekjoon Online Judge' 카테고리의 다른 글
<함수> 4673번 셀프 넘버 with 파이썬 (0) | 2020.11.06 |
---|---|
<함수> 15596번 정수 N개의 합 with 파이썬 (0) | 2020.11.04 |
<1차원 배열> 8958번 OX퀴즈 with 파이썬 (0) | 2020.10.30 |
<1차원 배열> 1546번 평균 with 파이썬 (0) | 2020.10.28 |
<1차원 배열> 3052번 나머지 with 파이썬 (0) | 2020.10.26 |