https://www.acmicpc.net/problem/4344
문제
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
내 풀이
n = int(input())
for _ in range(n):
a = list(map(int, input().split()))
tests = a[1:]
mean = sum(tests)/len(tests)
#i = 0 여전히 i가 0에서 시작하지 않으면 어쩌지 걱정이 많았다.
d = []
for i in range(len(tests)):
if tests[i] > mean:
d.append(tests[i])
e = len(d) / a[0]
f = (round(e*100, 3))
print(format(f, ".3f")+"%")
해설
소수를 원하는대로 표시하는데에 골먹은 문제.
round() 함수로 소수점 3자리 이하를 반올림해줬다.
하지만 그걸론 소수점이 충분히 안생기는 ex)40.0% 등을 강제로 format()의 ".3f"로 바꿔주었다.
list[1:]도 아주 중요 포인트. 궁금하면 500원.
근데 나는 너무 문제 풀이에 리스트위주로 하는것같다. 프린트시 파악하기 쉽다는 장점이 있지만, 덜 수학적이라는 문제가 있다.
정답 풀이
n = int(input())
for _ in range(n):
nums = list(map(int, input().split()))
avg = sum(nums[1:])/nums[0] # 평균을 구함 (nums[0]: 학생수, nums[1:] 점수)
cnt = 0
for score in nums[1:]:
if score > avg:
cnt += 1 # 평균 이상인 학생 수
rate = cnt/nums[0] *100
print(f'{rate:.3f}%')
출처:https://ooyoung.tistory.com/62
해석
나는 주어진 학생수를 활용 안했다. 주어진 입력값을 잘 활용하자@!
★
다시 나온 for score in num[1:] . score변수를 따로 선언하지 않고 바로 num[1:]이라는 list를 활용할 수 있다는게 정말 좋다.
count를 사용하면 len같은것보다 시간복잡도 면 같은 측면에서 더욱 효율적인것 같다.
'sw사관학교 정글 2기 > 01 기초,재귀,완전탐색, 정렬' 카테고리의 다른 글
[기초-함수] 백준 15596번 정수 N개의 합 with Python3 (0) | 2021.08.07 |
---|---|
[기초-배열] 백준 2577번 숫자의 개수 with Python3 (0) | 2021.08.07 |
[기초-배열] ★백준 8958번 -OX퀴즈- with.Python3 (0) | 2021.08.07 |
[기초-배열] 백준 2562번 -최댓값- with.Python3 (0) | 2021.08.07 |
[기초-반복문] 백준 10871번 -X보다 작은 수- with.Python3 (0) | 2021.08.07 |
댓글