본문 바로가기
코딩테스트

[Python] 백준 4344 풀이

by CuckooBird 2022. 12. 30.

문제

대학생 새내기들의 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 시작해볼까 합니다.