티스토리 뷰

 백준 알고리즘 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'),'%')
댓글
최근에 올라온 글
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Total
Today
Yesterday