
이번 문제는 좀 간단했던거 같다.
간단해도, 머리속으로 차분히 정리해보는 습관을 들이려 한다.
#생각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 |
댓글