nan + nan = 2nan

[백준][Python3] #4344. 평균은 넘겠지 본문

Python/백준 알고리즘

[백준][Python3] #4344. 평균은 넘겠지

2nan 2021. 8. 15. 02:00
728x90

 


코드 입력

##### float 사용하는데, 소수점 셋째 자리까지 출력하는 방법을 생각해봐야 한다.


N = int(input())

for i in range(N):
    score = list(map(int, input().split()))
    avgsum = sum(score[1:]) / len(score[1:])
    cnt = 0

#    
    for i in score[1:]:
        # float 인 avgsum 과 list인 score[1:]을 비교할 방법.
        if i > avgsum:
            cnt += 1
#             else:
#                 cnt = 1

    rate = cnt / score[0] * 100
    print(f'{rate:.3f}%')

 

 

이전에 풀었던 OX문제와 비슷한 양상이다.

처음에 입력할 학생 수를 int(input())으로 출력한다.

그리고 for 반복문에 대입해 학생 수만큼 반복해주고,

list와 map을 활용해 학생들 점수 입력할 변수를 생성,

그리고 학생들의 점수를 평균내는 변수를 생성한다.

또한 다음 반복문에서 평균을 넘는 학생을 가리기 위해

cnt 변수를 미리 생성해 놓는다.

그래서 하위에 또 for 반복문을 사용하는데,

score의 변수 첫번째는 학생 수이기 때문에,

2번째부터 사용한다는 의미로 score[1:]을 사용해준다.

해당 범위에서 if문을 사용해, 평균보다 높으면 카운팅을 해주는 식을 생성하고,

평균보다 높은 학생 수를 cnt에 담아 마지막에 학생 수로 나누어줘서

평균을 넘는 비율 식을 생성한다.

else 표현과 for 반복문을 하나 더 삽입해서 생각해봤지만 답이 원하는 것처럼

출력이 안되고, 답답했다. 그래도....

여기까지는 원래 조금 식이 더럽고(?) 복잡했지만 다듬으면서 그래도 만들었는데,

마지막이 중요했다.

 

배웠는지는 기억이 잘 나지 않는데,,

f-string이라는 녀석이다.

소수점 3자리까지 출력을 해야 한다고 해서,

이를 어떻게 해야 하나 고민이 많았다. 

f-string은 이렇게 사용한다고 한다.

 

1. 본래 문자열을 지정하는 따옴표 앞에 f를 접두사에 삽입한다.

2. 문자열 안에서 중괄호를 이용해 변수나 계산식을 입력할 수 있다.

3. 중괄호 내에서 구분자를 이용한다.

ex) 서식 지정자  - 문자열 : s /  정수형 : d / 실수형 : f

 

여기서 보는 녀석을 활용하는 방법이다. 소수점 3자리 수까지 표현하는 것이 목적이기 때문에,

float형태의 실수형을 선택한다. 그리고 f'{변수 : 3f}%' 의 형태로 입력한다.

마지막 %는 출력 시, %라는 기호가 나올 수 있게 입력을 한다.

활용하는게 많을수록 얻어가는게 많은 느낌. 좋다

 


출처 : 백준 Online Judge

https://www.acmicpc.net/problem/4344

 

4344번: 평균은 넘겠지

대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.

www.acmicpc.net

 

Comments