대표값
N명의 학생의 수학성적이 주어집니다. N명의 학생들의 평균(소수 첫째자리 반올림)을 구하고, N명의 학생 중 평균에 가장 가까운 학생은 몇 번째 학생인지 출력하는 프로그램을 작성하세요.
답이 2개일 경우 성적이 높은 학생의 번호를 출력하세요.
만약 답이 되는 점수가 여러 개일 경우 번호가 빠른 학생의 번호를 답으로 한다.
입력설명
첫줄에 자연수 N(5<=N<=100)이 주어지고, 두 번째 줄에는 N개의 자연수가 주어진다.
학생의 번호는 앞에서부터 1로 시작해서 N까지이다.
출력설명
첫줄에 평균과 평균에 가장 가까운 학생의 번호를 출력한다.
평균은 소수 첫째 자리에서 반올림합니다.
입력예제 1
10
45 73 66 87 92 67 75 79 75 80
10
65 73 66 87 92 67 55 79 75 80
출력예제 1
74 7
74 9
코드
N = int(input())
List = list(map(int, input().split()))
avg = round(sum(List)/N)
min = 1000000
for idx, value in enumerate(List):
tmp = abs(value-avg)
if tmp < min:
min = tmp # (점수 - 평균)의 최솟값
score = value # 답이되는 점수
answer = idx + 1 # 답
elif tmp == min: # 같은 거리의 학생이 나온 경우
if value > score:
score = value
answer = idx+1
# 번호가 빠른 학생의 번호를 답으로 함으로 다른 조건문은 붙이지 않는다.
print(avg, answer)
알아야 할 것
for index, value in enumerate(list)
리스트의 인덱스 값과 리스트 값을 쌍으로 대응시켜 준다.
round() : 4.5001을 반올림하면 5로 가지만, 4.500 를 반올림하면 4로 간다.
round_half_even 방식을 취한다 : 짝수쪽으로 근사값
따라서
avg = int(sum(List)/N + 0.5)
이렇게 평균을 구해주는 것이 좋다.
'⏰ 코딩테스트 > 구현' 카테고리의 다른 글
백준 알고리즘 - 2476 - 주사위 게임 (0) | 2021.09.14 |
---|---|
뒤집은 소수 (0) | 2021.09.10 |
소수(에라토스테네스 체) (0) | 2021.09.10 |
자릿수의 합 (0) | 2021.09.08 |
정다면체 (0) | 2021.09.07 |