문제
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
입력
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
출력
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
코드
C = int(input())
for _ in range(C):
score = list(map(int, input().split()))
N = score[0]
score.remove(N)
avg = 0
for i in score:
avg += i
avg = avg / N
avg_sc = []
cnt = 0
for i in score:
if i > avg:
cnt += 1
ov_avg = round(cnt/N*100,3)
print('{:.3f}%'.format(ov_avg))
C : 사이클 반복 횟수
score : N과 N만큼의 점수를 입력받는 리스트. 인덱스 0에는 N이 들어감
socre에서 0번째 인덱스를 N으로 옮기고 N에 해당하는 숫자는 remove하여 반복문 돌릴 때 수월하게 함.
avg : 각 사이클의 점수 평균을 저장함. sum변수를 따로 만들기보단 누적하는 식으로 진행함.
cnt : score의 각 원소가 avg보다 클 경우에 값을 1씩 더하여 평균 이상의 점수를 카운트함.
ov_avg : cnt/N을 하여 100을 곱한 값에 대해 소수점 3번째 까지 나타나게 하도록 함.
만약 출력을 할 때,
print('{0}%'.format(ov_avg))
으로 했다면, 40.0%로 출력되어 성공이 뜨지 않았을 것임
따라서,
print('{:.3f}%'.format(ov_avg))
으로 format 메소드를 활용하여 출력해야 성공이 뜰 수 있음
후기
알고리즘은 맞을텐데 왜 성공이 안 뜨지??? 했는데 format 메소드를 활용하는 방법을 몰랐기 때문이더라고요.. 40.0%로 떠도 맞다고 할거라고 생각했지만, 출력이 완벽하게 갖도록 설정해놓은 건 이런 사소한 문법까지도 알 수 있도록 하기 위해서겠죠. 오늘도 새로운 사실 알게 되어 좋았습니다.
너무 간단한 것만 하고 적게 하는게 아닌가 약간의 두려움이 왔는데, 하루에 하나씩 하는 것만으로 뿌듯해하기로 했습니다. 이렇게 해야 지치지 않고 지속적으로 할 수 있을거 같아요. 내일은 실버5 시작해볼까 합니다.
'코딩테스트' 카테고리의 다른 글
[Python] 백준 2023 풀이 (0) | 2023.01.01 |
---|---|
[Python] 백준 2751번 풀이 + input() 과 sys.stdin.readline() 차이 (0) | 2022.12.31 |
[Python, C] 백준 1110번 풀이 (0) | 2022.12.29 |
[Python] 백준 1546 풀이 (0) | 2022.12.29 |
[C언어] 백준 5554 풀이 (0) | 2022.05.06 |