https://www.acmicpc.net/problem/4344
4344번: 평균은 넘겠지
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
www.acmicpc.net
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
처음 인풋으로 c
두번 째 인풋으로 학생의 수 n과(새로만든 리스트의 1번째 열), 개별 학생의 점수 p(2열부터 마지막 열까지)
를 줬다.
첫번째 테스트 케이스 숫자대로 for문을 돌렸다.
두번째 학생의 수(n)와, 개별 학생의 점수(p) 인풋값을 받아 리스트를 만들었다.
문제에서 평균을 넘는 학생들의 비율을 구하라고 했다.
평균을 구하고 평균을 넘는 학생의 점수를 세서 학생의 수로 나눠 주면 비율이 된다.
평균은 개별 학생의 점수를 더한값을 학생의 수로 나누면 된다. ex) 3+6+7의 평균은 (3+6+7 / 3)
평균을 넘는 학생의 수는 count로 정의하고 또 다른 for문 안에서 학생의 점수가 평균을 넘을 경우 count를 1씩 증가시키며 평균을 넘는 수를 구했다.
print에서 평균을 넘는 학생의 비율을 구해야 하므로 count / n을 우선 사용하고 결과값을 확인했다.
문제에서는 답을 퍼센트로 구하며 소수점 셋째 자리까지 출력하라고 했으니
print('%.3f' % (count/n *100) + '%')으로 출력했다.
'%.3f' % X << X의 값의 소수점 세번째 자리까지 나타내게하는 포맷 코드, 테스트로 출력해봤는데 아마 소수점 네번째 자리에서 반올림 되는 듯 하다.
ex) 3f대신 7f가 들어가면 8번째 자리에서 반올림되서 7번째 자리까지 표시하게 한다. 3f대신 nf라면 n번째까지 표시, n+1번째 자리에서 반올림 될 것이다.
c = int(input())
for i in range(c):
list_input = list(map(int, input().split(' ')))
n = list_input[0]
p = list_input[1:]
average = sum(p)/n
count = 0
for j in p:
if j > average:
count += 1
print('%.3f' % (count/n * 100) + '%')
주의 해야할 것은 " count/n "는 float형태지만 여기서 포맷 코드" '%.3f' % "을 적용하니 문자열로 형태가 변경되었다. 파이썬에서는 문자열과 숫자형의 덧셈이 불가능하니 이 점은 앞으로도 유의해서 사용해야 할 것이다.(이것 때문에 오류 많이 나고 많이고쳤음)
'알고리즘' 카테고리의 다른 글
백준 2941 크로아티아 알파벳 [문제 풀이] (0) | 2021.06.16 |
---|---|
백준 1316 그룹 단어 체커[개인적인 풀이 과정] (0) | 2021.06.16 |
백준 1110번 문제 [지극히 개인적인 풀이 과정] (0) | 2021.06.14 |
백준 2588번 문제 지극히 개인적인 풀이 과정 (0) | 2021.06.14 |
백준 2884번 지극히 개인적인 풀이 과정 (0) | 2021.06.14 |