이번 문제는 좀 간단했던거 같다.
간단해도, 머리속으로 차분히 정리해보는 습관을 들이려 한다.
#생각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문으로 바꾸면 더 짧아질것 같긴 한데, 시간이 나면 고쳐봐야겠다.
'코딩테스트 > 백준 알고리즘 풀이' 카테고리의 다른 글
[백준 알고리즘/python] 백준 10809번 알파벳 찾기, 파이썬 (0) | 2020.03.18 |
---|---|
[백준 알고리즘/python] 백준 11720번 숫자의 합, 파이썬 (0) | 2020.03.18 |
[백준 알고리즘/python] 백준 1065번 한수, 파이썬 (0) | 2020.03.16 |
백준 | 4673번 셀프넘버, 파이썬 (0) | 2020.03.16 |
백준 | 8958번 OX퀴즈, 파이썬 (0) | 2020.03.16 |
댓글