본문 바로가기
I am a developer

백준 / Python / 4344 / 평균은 넘겠지 / 문제풀이 / 파이썬 format 함수 / 소수점 반올림

by Echinacea 2023. 5. 20.
반응형

 

 

문제 설명

 

 

 

 

문제의 포인트

  • for문을 많이 쓸 수밖에 없는 문제. 하지만 for문을 줄일 방법을 이리저리 적용해보자
  • 소수점 세자리까지 출력하는 함수를 알아야 한다.(format함수)
  • 직전 1157번 문제보단 훨씬 쉽다.

 

 

 

문제 풀이 방법

4344번 문제는 여태까지 배운 기본기를 잊지 않고 있는지 확인할 수 있는 좋은 문제이다.



  1. 문제에서 첫 줄에 ‘첫째 줄에는 테스트 케이스의 개수 C가 주어진다.’ 고 했으니, 첫 줄에 정수를 입력받아준다. 이 때 for 문 돌리려면 정수형로 받는 게 편하다.
C = int(input())

 

 

 

2. 예제 형태가

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

이렇게 되어있으면 첫 줄에서 입력한 정수만큼 여러 줄을 입력할 수 있도록 짜야 한다.

 

 

 

 

3. 합계도 구하고 평균도 구하고 갯수도 구해야 하니 리스트 형태로 받아야 한다.

for i in range(C):
    group = list(map(int, input().split()))

 

 

 

 

4. 평균 이상인 점수의 갯수를 세기 위해 count 변수를 생성한다.

count = 0

 

 

 

 

5. 평균 점수를 산출하기 위해 for문을 돌리지 않고 파이썬 리스트의 기본 기능만을 이용해 평균을 구할 수 있다.

average = sum(group[1:])/group[0]

 

 

 

 

6. 이제 평균이 넘는 점수들을 for문을 이용해 count 변수에 넣어주면 된다.

for i in group[1:]:
        if i > average:
            count += 1

 

 

 

 

7. 마지막으로 이 문제에서 가장 까다로울 수 있는 부분인 출력 부분. 특별히 이번엔 출력 부분만 잘게 쪼개서 보자.

7-1. 출력 결과는 소수점 셋째 자리인데, 애초에 소수점 셋째 자리까지 안 나오는 결과값은 round로 출력할 수 없다. 즉, 다른 방법을 찾아야 한다는 뜻.

7-2. 이 때는 파이썬의 format 함수를 사용하면 된다.

 

간단한 format함수 사용 예시

#소수점 셋째자리에서 반올림해서 소수점 둘째자리까지 출력
number = "{:.2f}".format(10.56785678)
print(number)
-----------------------console---------------------------
10.57

 

print("{:.3f}".format(count/len(group[1:])*100))
-----------------------console---------------------------
40.000

먼저 이렇게 입력하고 결과값을 확인한다.

 

 

7-3. 결과값이 원하는대로 나왔으면 출력 결과에서 요구하는대로 형식을 맞춰주면 끝이다.

print("{:.3f}".format(count/len(group[1:])*100),"%", sep='')
-----------------------console---------------------------
40.000%

 

 

 

정답 코드

C = int(input())

for i in range(C):
    group = list(map(int, input().split()))
    count = 0
    average = sum(group[1:])/group[0]
    for i in group[1:]:
        if i > average:
            count += 1
    print(count, len(group[1:]))
    print("{:.3f}".format(count/len(group[1:])*100),"%", sep='')

 

반응형

댓글