Published 2021. 9. 7. 16:23

대표값

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
복사했습니다!