평균은 넘겠지 출처다국어분류
시간 제한 |
메모리 제한 |
제출 |
정답 |
맞은 사람 |
정답 비율 |
1 초 |
256 MB |
80917 |
29913 |
25930 |
38.079% |
https://www.acmicpc.net/problem/4344
문제
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
입력
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
출력
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
백준 알고리즘 # 4344번 : 평균은 넘겠지
c = int(input()) # 테스트 케이스 수
avg = [] # 점수의 평균
for _ in range(c):
n = list(map(int, input().split()))
sum = 0
for i in range(n[0]): # n = [5, 50, 50, 70, 80, 100]
sum += n[i + 1] # sum = 350
cnt = 0 # 평균을 넘는 학생들
for i in range(n[0]): # sum / n[0] = 70
if n[i + 1] > (sum / n[0]):
cnt += 1
avg.append((cnt / n[0]) * 100)
n.clear() // # 입력받는 n 리스트 초기화
for i in range(c):
print("%.3f" %avg[i] + "%")
풀이
c 변수로 테스트 케이스 수를 입력받고, avg = [] 변수를 설정해놓는다.
다음으로 for문을 돌리는데 받을 인자가 없기 때문에 "_"로 설정하고
range(c), 즉 입력받은 5만큼 테스트 케이스를 반복해서 돌려준다.
테스트 케이스로 입력되는 것들을 list []로 묶고, map 함수를 이용해서 정수로 각각 따로 입력받는다.
n = [5, 50, 50, 70, 80, 100] ...
그 다음 sum 변수를 0으로 초기화 시키고
for문으로 n에서 점수의 개수를 나타내는 n[0]을 range로 설정하고
n[i + 1] 즉, n[1 ~ 5]까지 5개의 점수를 다 더해주면 sum = 350이 나온다.
그리고 평균을 넘은 학생들을 세어줄 cnt(count) 변수를 0으로 초기화하고
위와 마찬가지로 for문을 점수의 개수만큼 range를 설정한 뒤
평균인 350 / 5 = 70점을 초과하는 개수를 세어준다. (80점, 100점)
cnt = 2
마지막으로 맨 처음 만들어뒀던 avg 변수 리스트에 평균을 넘은 학생을 전체 학생과 나누고 백분율을 나타내기 위해서 100을 곱해서 리스트에 추가(append)해준다.
avg = [40]
그리고 다음 7, 3, 3, 9 테스트 케이스를 진행하기 위해서 clear() 함수를 사용해서
입력받을 n을 초기화 시켜주고 다시 for문을 돌린다.
이렇게 되면 결국 나머지 5개 테스트 케이스의 백분율 결과가 리스트에 추가(append)되고
이 결과를 for문으로 반복해서 "%3.f" 소수점 세 자리까지 표현하고, %avg[i]로 리스트에 있는 하나의 값을 뽑아내고 "%"까지 표시해서 출력하면 끄--읏!!👏
자세한 코드가 궁금하신 분들은 아래 GitHub 참고해주세요🙏
최종 소스코드
'코딩테스트 > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 | 2439 : 별 찍기 - 2 (Python / 파이썬) (0) | 2020.09.18 |
---|---|
백준 알고리즘 | 1712 : 손익분기점 (Python / 파이썬) (0) | 2020.09.17 |
백준 알고리즘 | 15552 : 빠른 A + B (Python / 파이썬) (0) | 2020.09.17 |
백준 알고리즘 | 2884 : 알람 시계 (Python / 파이썬) (0) | 2020.09.17 |
백준 알고리즘 | 1546 : 평균 (Python / 파이썬) (0) | 2020.09.15 |
댓글