백준 [4344] - 평균은 넘겠지
문제
작성한 코드
import sys
input = sys.stdin.readline
C = int(input())
for i in range(C):
num_grades = list(map(int, input().split()))
avg = sum(num_grades[1:])/num_grades[0]
students = 0
for i in range(1, len(num_grades)):
if num_grades[i] > avg:
students += 1
ratio = (students / num_grades[0]) * 100
print(f"{ratio:.3f}%")
- sys.stdin.readline을 input에 할당하여 사용하였다.
- input()으로 문자를 입력받고, int형으로 형변환하여 C에 저장한다. (C는 테스트케이스 개수)
- for i in range(C): 테스트케이스 개수만큼 반복문 for문을 반복한다.
- input()으로 문자를 입력받고, split()으로 구분한 뒤, int형으로 형변환하여 list인 num_grades에 map()으로 각각 할당해준다. (학생 수와 학생들의 점수를 같이 입력받는다.)
- num_grades의 0번 인덱스인 학생 수를 제외하고 sum()으로 합을 구한뒤, num_grades의 0번 인덱스인 학생 수로 나누어 주면 평균을 구할 수 있고, 이를 avg에 저장한다.
- 평균을 넘는 학생들의 수를 나타내는 students를 0으로 초기화 시켜준다. (각 테스트케이스 별로 평균을 넘는 학생들의 수는 다르기 때문에)
- for i in range(1, len(num_grades)): 학생 수를 나타내는 0번 인덱스를 제외하고, num_grades의 길이만큼 반복문 for문을 반복하여 평균을 넘는 학생들의 수를 구한다.
- 만약 평균 값을 넘는다면, 평균을 넘는 학생들의 수를 나타내는 students를 +1씩 증가한다.
- 평균을 넘는 학생들의 비율은 (students / num_grades[0] (=전체 학생 수)) * 100 (%로 계산) 이렇게 계산하여 ratio에 저장한다.
- 비율을 print()로 출력할 때에 f-string()을 사용하여 %와 같이 출력되게 한다.
그리고 비율뒤에 (숫자):.3f를 붙여주어 소수점 셋째자리까지 출력되게 한다.
'코딩테스트 > 백준' 카테고리의 다른 글
백준 [4673] - 셀프 넘버 (0) | 2022.08.10 |
---|---|
백준 [15596] - 정수 N개의 합 (0) | 2022.08.10 |
백준 [8958] - OX퀴즈 (0) | 2022.08.09 |
백준 [1546] - 평균 (0) | 2022.08.08 |
백준 [3052] - 나머지 (0) | 2022.08.08 |
댓글