본문 바로가기
코딩테스트/백준 알고리즘 풀이

백준 | 4344번 평균은 넘겠지, 파이썬

by Godgil 2020. 3. 16.

이번 문제는 좀 간단했던거 같다.

간단해도, 머리속으로 차분히 정리해보는 습관을 들이려 한다.

 

#생각1. 첫째 줄에는 테스트 케이스의 개수를 받는다.

#생각2. 둘째 줄부터는 각 테스트 케이스 마다 학생의 수가 먼저 주어지고, N명의 점수가 추가로 주어진다.

#생각3. 결과는 각 케이스마다 평균을 넘는 학생들의 비율을 반올림해서 소수 셋째자리까지 출력하는 것

#생각4. 받아온 각 케이스의 평균을 먼저 구한다.

#생각5. 반복문을 돌리면서 평균보다 높으면 count에 1을 더한다.

#생각6. 비율이니까 count의 수를 전체 학생수로 나누고 100을 곱하면 비율이 나온다.

 

내가 처음 작성한 코드는 아래와 같다.

 

case_num = int(input())
case_list = list()
i = 0
while True:
    case_list = map(int, input().split())
    case_list = list(case_list)
    sum = 0
    count = 0
    for j in range(1,case_list[0] +1):
        sum = sum + case_list[j]
    aver = sum/case_list[0]
    for h in range(1,case_list[0] +1):
        if case_list[h] > aver:
            count = count +1
    print('%0.3f'%(count/case_list[0]*100) + '%')
    i = i +1
    if i == case_num:
        break

 

제출을 해 보면 맞기는 맞았는데,

조금 난잡해 보이기도하고, 더 간단하게 쓸 순 없을지 찾아봤다

 

case_num = int(input())
case_list = list()
i = 0
while True:
    case_list = map(int, input().split())
    case_list = list(case_list)
    aver = sum(case_list[1:])/case_list[0] 
    count = 0
    for j in case_list[1:]:
        if j > aver:
            count = count + 1
    print('%0.3f'%(count/case_list[0]*100) + '%')
    i = i +1
    if i == case_num:
        break

슬라이싱과 sum메서드를 같이 이용해서 좀 더 짧게 만들어 보았다.

while을 for문으로 바꾸면 더 짧아질것 같긴 한데, 시간이 나면 고쳐봐야겠다.

댓글