-
section2.4 대표값알고리즘 2022. 10. 22. 17:51
N명의 학생의 수학 점수가 주어집니다. N명의 학생들의 평균(소수 첫째 자리 반올림)을 구하고, N명의 학생 중 평균에 가장 가까운 학생은 몇 번째 학생인지 출력하는 프로그램을 작성하세요. 평균과 가장 가까운 점수가 여러 개일 경우 먼저 점수가 높은 학생의 번호를 답으로 하고, 높은 점수를 가진 학생이 여러 명일 경우 그중 학생 번호가 빠른 학생의 번호를 답으로 합니다.
import sys sys.stdin = open("input.txt", "rt") n = int(input()) scoreList = list(map(int, input().split())) sList = [] avg = 0 min = float('inf') maxIndex = 0 maxScore = -1 ''' 1. 평균 구하기(첫째 자리에서 반올림) 2. for문 > 리스트에서 평균값과 점수 차이 리스트 구하기 3. 최솟값 구하고 인덱스 출력 ''' for i in range(n): avg += scoreList[i] avg = round(avg/n) for j in range(n): if (scoreList[j] > avg): sList.append(scoreList[j] - avg) else: sList.append(avg - scoreList[j]) if sList[j] < min: min = sList[j] for z in range(n): if sList[z]==min: if scoreList[z] > maxScore: maxScore = scoreList[z] maxIndex = z print("%d %d" %(avg, maxIndex+1))
정답
import sys sys.stdin = open("input.txt", "rt") n = int(input()) a = list(map(int, input().split())) min = 2147000000 ave = round(sum(a)/n) for idx, x in enumerate(a): tmp=abs(x-ave) if tmp<min: min=tmp score=x res=idx+1 elif tmp==min: if x>score: score = x res = idx+1 print(ave, res)
파이썬 평균 구할 때 list에서 sum을 활용하면 되는데 for문으로 sum 구했다
파이썬 abs 절댓값 함수가 있는지 모르고 또 따로 구했다
인덱스 번호와 원래의 점수를 튜플로 넣을까 고민했는데 이것도 enumerate를 이용하면 됐다
문법을 알았으면 조금 더 간단하게 구할 수 있었는데 아쉽다
round 함수 오류
파이썬 round는 round_half_even 방식을 택한다
따라서 5.5 > 6으로 반올림되지만 4.5 > 4로 반올림되기 때문에 문제가 발생한다.
a = 67.5 a =int(a+0.5)
이런 식으로 0.5를 더하고 정수화시켜서 반올림을 구현해야 한다.
728x90'알고리즘' 카테고리의 다른 글
section2.6 자릿수의 합 (0) 2022.10.22 section2.5 정다면체 (0) 2022.10.22 section2. 최솟값 구하기 (1) 2022.10.21 section2.3 K번째 큰 수 (0) 2022.10.21 section2.2 K번째 수 (0) 2022.10.21