N명의 학생의 수학점수가 주어집니다. N명의 학생들의 평균(소수 첫째자리 반올림)을 구하고, N명의 학생 중 평균에 가장 가까운 학생은 몇 번째 학생인지 출력하는 프로그램을 작성하세 요.
평균과 가장 가까운 점수가 여러 개일 경우 먼저 점수가 높은 학생의 번호를 답으로 하고, 높은 점수를 가진 학생이 여러 명일 경우 그 중 학생번호가 빠른 학생의 번호를 답으로 합니다.
▣ 입력설명
첫줄에 자연수 N(5<=N<=100)이 주어지고, 두 번째 줄에는 각 학생의 수학점수인 N개의 자연 수가 주어집니다. 학생의 번호는 앞에서부터 1로 시작해서 N까지이다.
▣ 출력설명
첫줄에 평균과 평균에 가장 가까운 학생의 번호를 출력한다. 평균은 소수 첫째 자리에서 반올림합니다.
10
45 73 66 87 92 67 75 79 75 80
74 7
[내코드]
def min(num):
min=100
for i in range(len(num)):
num.append(abs(num[i]-avg))
if(min>num[i]):
min=num[i]
return min
N=int(input())
num=list(map(int,input().split()))
sum=0
for j in range(len(num)):
sum+=num[j]
avg=round(sum/N)
for i in range (len(num)):
if(min(num)==(num[i]-avg)):
print("%d %d" %(avg,i+1))
break
else:
for j in range(len(num)):
if(-min(num)==(num[i]-avg)):
print("%d %d" %(avg,j+1))
break
1.최솟값 함수 정의
2.for문을 이용해서 평균값 구하기
3.리스트 내의 값들-평균값 --> 평균값과 가장 가까운 값 구하기
4.for문내에 만족하는 값이 없으면 평균값보다 작은 인덱스를 Search
[해설코드]
n=int(input())
a=list(map(int, input().split()))
ave=round(sum(a)/n)
min=10000000
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
1.list의 합 구하기 : sum(리스트)
2.for문 속 idx:학생 인덱스 번호, x:학생 점수
3.enumerat출력 예시)(0, item1), (1, item2), (2, item3), … (n, itemn)
4.elif tmp==min 답이 2개나온 경우--> ex)ave=74 73 75 75 75인 경우에 어차피 if x>score 이 부분에서 false이므로 넘어간다.
❗round는 round_half_even 방식을 채택