Notice
Recent Posts
Recent Comments
Link
Love Every Moment
〔백준/파이썬〕4344번 평균은 넘겠지 본문
반응형
출처
문제
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
첫째 줄에는 테스트 케이스의 개수 C가 주어진다. 둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
예제
# 입력
5
5 50 50 70 80 100
7 100 95 90 80 70 60 50
3 70 90 80
3 70 90 81
9 100 99 98 97 96 95 94 93 91
# 출력
40.000%
57.143%
33.333%
66.667%
55.556%
처음 틀렸던 풀이
import sys
# 총 케이스 개수
total = int(sys.stdin.readline())
for i in range(total) :
# 각 케이스 입력(첫 번째 입력값: 해당 케이스의 학생 수)
case = list(map(int, sys.stdin.readline().split()))
avg = (sum(case) - case[0]) / case[0]
# 평균을 넘는 학생 수
cnt = 0
for j in range(1, len(case)) :
if case[j] > avg :
cnt += 1
print(cnt/case[0] * 100)
- 소수점 셋째 자리까지 출력해야 하는데 40.0% 처럼 첫 번째까지만 출력되어서 틀렸다
- 이를 해결하기 위해서 필요한 것이 f-string !
- 더불어 case[1:] 과 같은 방법으로 첫 번째 요소를 제외할 수 있다는 것도 두 번째 풀이에서 적용
정답 풀이
import sys
# 총 케이스 개수
total = int(sys.stdin.readline())
for i in range(total) :
# 각 케이스 입력(첫 번째 입력값: 해당 케이스의 학생 수)
case = list(map(int, sys.stdin.readline().split()))
avg = sum(case[1:]) / case[0]
# 평균을 넘는 학생 수
cnt = 0
for j in case[1:] :
if j > avg :
cnt += 1
print(f'{cnt/case[0] * 100:.3f}%')
- sum(case[1:]) 처럼 쓰면 0번째 요소를 제외한 1번째부터의 합을 구할 수 있다
- print(f'~~~{숫자}~~~') 의 형식으로 출력할 수 있다
- 여기서 숫자 뒤에 :.자릿수f 를 쓰면 원하는 자릿수만큼의 소숫점을 출력할 수 있다
- C언어에서 printf() 의 사용법과 매우 유사한 느낌이다
노트
- 리스트에서 원하는 부분을 추출하여 사용하기 (ex: case[1:])
- f-string 이용하여 특정 소숫점 자리까지 출력하기
반응형
'PROGRAMMING::LANGUAGE > Python' 카테고리의 다른 글
〔모두를 위한 파이썬〕문자열, 슬라이싱, 라이브러리 함수(find, strip, replace) (0) | 2022.06.23 |
---|---|
〔모두를 위한 파이썬〕반복문, while 루프, for 루프 (0) | 2022.06.23 |
〔백준/파이썬〕3052번 나머지 (0) | 2022.06.22 |
〔백준/파이썬〕2577번 숫자의 개수 (0) | 2022.06.22 |
〔백준/파이썬〕10818번 최소, 최대 (0) | 2022.06.22 |
Comments