티스토리 뷰
백준 알고리즘 4344번 : 평균은 넘겠지
<처음 짰던 코드>
n = int(input())
lst = []
for i in range(n):
lst.append(list(map(int,input().split())))
avg = sum(lst[i][1:]) / lst[i][0]
count = 0
for j in range(1,int(lst[i][0])+1):
if(int(lst[i][j]) > avg):
count += 1
pro = (count/lst[i][0]) * 100
#print(format(pro,'.3f%'))
#print(f'{pro:.3f}%')
print('%.3f' %pro + '%')
예제에 나온 값들이 정확히 출력되었는데 자꾸 틀렸다고 해서 오류를 찾는데 한참 걸렸다.
질문 게시판에서 찾은
반례(?)를 입력했을 때
22.222%가 나온다...는 사실을 확인하고 코드를 고쳐보았다.
for j in range(1,int(lst[i][0])+1):
if(int(lst[i][j]) > avg):
count += 1
pro = (count/lst[i][0]) * 100
위 코드에서
(count/lst[0][0]) * 100
이 때 값은 원하는 값인 0.0이 출력되는 반면
pro를 출력하면 전혀 다른 값 22.22222222222222이 출력 되었다.
내가 입력한 코드에서는 lst안의 값이 평균 값보다 클 때 pro를 구하는 식이 돌아가도록 되어있었다.
하지만 예제에서는 평균보다 큰 값이 없기 때문에 pro값이 제대로 입력되지 않은 것이다.
<수정한 코드>
n = int(input())
lst = []
for i in range(n):
lst.append(list(map(int,input().split())))
avg = sum(lst[i][1:]) / lst[i][0]
count = 0
for j in range(1,int(lst[i][0])+1):
if(int(lst[i][j]) > avg):
count += 1
pro = (count/lst[i][0]) * 100
print('%.3f' %pro + '%')
따라서
pro = (count/lst[i][0]) * 100
의 식을 if 문 밖으로 꺼내주니 원하는 값이 제대로 출력되었다.

후...성공...^-^
- 0.000% 형태로 출력하기
1) '+' 기호로 % 붙여주기
print('%.3f' %pro + '%')
2) f 문자열 사용하기
print(f'{pro:.3f}%')
3) format 이용하기
print(format(pro,'.3f'),'%')
'🦖 Programming > Python' 카테고리의 다른 글
[Python] 백준 알고리즘 10870번 : 피보나치 수 5 (0) | 2022.08.25 |
---|---|
[Python] 백준 알고리즘 18870번 : 좌표 압축 (0) | 2022.08.21 |
[Python] 백준 알고리즘 1157번 : 단어 공부 (0) | 2022.08.21 |
[Python] find() 함수 (0) | 2022.07.07 |
[Python] 특수문자 출력하기 (0) | 2022.06.30 |
댓글