파이썬 알고리즘 004 | 대표값

Yunny.Log ·2021년 1월 6일
0

Algorithm

목록 보기
4/318
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

<내 풀이>

sum=0
a=int(input())
student_score = list(map(int, input().split()))
for i in student_score : 
    sum+=i
avg=round((sum/a),0)

min=1
for i in student_score : 
    if abs(avg-i) < abs(avg-min) :
        min=i
    elif abs(avg-i) == abs(avg-min) :
        min=max(i,min)
  
print(int(avg), ((student_score.index(min))+1))

<풀이>

import sys
#sys.stdin=open("input.txt", "r")
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)

<반성점>

<배운 점>

  • round

  • 소수 둘째 자리에서 반올림 해라
    => 소수 첫째 자리까지 나오게 해라
    round(a,1)

  • 소수 첫째자리에서 반올림 해라
    => 소수 0째 자리까지 나오게 해라
    round(a,0)
    => 근데 이거 3.0, 4,0 이런식으로 나온다 이것 없애려면 정수처리 해주면 된다
    => 근데 파이썬의 round는 round_even_half 방식을 취한다
    => 쩜오와 같이 경계에 있으면 짝수 숫자로 간다는 것이다, 무작정 올림하는 것이 아니고
    (ex) round(4.50) 이런식이면 원래 반올림 하면 => 5 나와야 하는데
    4가 나오게 된다 (짝수 숫자 쪽으로 가버리는 것)
    (ex) round(5.50) 이라면 6 나온다 (짝수 숫자 쪽으로 가버리는 것)
    =>그래서 반올림 하기 위해서
    a=66.5 이라고 하면
    a=a+0.5
    a=int(a)
    print(a)

  • 절댓값화 해주기
    abs(number)

  • 리스트에서 평균 구할 때
    그냥 sum(list)/n으로 구하면 됨

  • enumerate: for index, value in enumerate(list/set/tuple/dictionary 등): 의 형식으로 사용하며, 리스트의 경우 순서와 값을 가진 enumerate 객체를 리턴함

(ex)

>>> t = [1, 5, 7, 33, 39, 52]
>>> for p in enumerate(t):
...     print(p)
... 
(0, 1)
(1, 5)
(2, 7)
(3, 33)
(4, 39)
(5, 52)
tuple

0개의 댓글