파이썬 알고리즘-4 대표값

jiffydev·2020년 8월 18일
0

Algorithm

목록 보기
4/92
post-thumbnail

4 대표값
N명의 학생의 수학성적이 주어집니다. N명의 학생들의 평균(소수 첫째자리 반올림)을 구하고,
N명의 학생 중 평균에 가장 가까운 학생은 몇 번째 학생인지 출력하는 프로그램을 작성하세
요.

답이 2개일 경우 성적이 높은 학생의 번호를 출력하세요. 만약 답이 되는 점수가 여러 개일
경우 번호가 빠른 학생의 번호를 답으로 한다.

▣ 입력설명
첫줄에 자연수 N(5<=N<=100)이 주어지고, 두 번째 줄에는 N개의 자연수가 주어진다.
학생의 번호는 앞에서부터 1로 시작해서 N까지이다.

▣ 출력설명
첫줄에 평균과 평균에 가장 가까운 학생의 번호를 출력한다.
평균은 소수 첫째 자리에서 반올림합니다.

▣ 입력예제 1
10
45 73 66 87 92 67 75 79 75 80

▣ 출력예제 1
74 7

내 코드

N=int(input())
score=list(map(int, input().split()))

avg=0
dev=[]

avg=round(sum(score)/N)

for j in range(len(score)):
    dev.append(abs(score[j]-avg))
min_idx=dev.index(min(dev))

print("%d %d" %(avg, min_idx+1))

이러면 차이가 같을 때 점수가 더 높은 사람을 고를 수 없으므로 틀림

풀이

n=int(input())
a=list(map(int, input().split()))
ave=sum(a)/n
ave=ave+0.5
ave=int(ave)
min=2147000000
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)

반성점

  • 문제 똑바로 읽자
  • 왜 인덱스를 굳이 다른 변수에 집어넣었는지 몰랐는데 생각해보니 안 넣으면 마지막 인덱스만 출력됨..
  • enumerate은 매번 봐도 까먹는다.

배운 것

  • 리스트에서 평균 구할 때는 그냥 sum(list)/n으로 구하면 됨
  • 절댓값은 abs()
  • enumerate: for index, value in enumerate(list/set/tuple/dictionary 등): 의 형식으로 사용하며, 리스트의 경우 순서와 값을 가진 enumerate 객체를 리턴함
profile
잘 & 열심히 살고싶다

0개의 댓글