enumerate() 함수
for idx, x in enumerate(a):
enumerate() 함수는 순서가 있는 자료형을 입력으로 받아 인덱스 값을 포함하는 enumerate 객체를 돌려준다.
for idx, ch in enumerate(['가', '나', '다']):
print(idx, ch)
#1 가
#2 나
#3 다
round() 반올림
*본 문제는 인프런 김태원 강사님의 파이썬 알고리즘 문제풀이 강의에 기반합니다.
[문제 대표값]
N명의 학생의 수학성적이 주어집니다. N명의 학생들의 평균(소수 첫째자리 반올림)을 구하고, N명의 학생 중 평균에 가장 가까운 학생은 몇 번째 학생인지 출력하는 프로그램을 작성하세요.
답이 2개일 경우 성적이 높은 학생의 번호를 출력하세요. 만약 답이 되는 점수가 여러 개일 경우 번호가 빠른 학생의 번로를 답으로 한다.
-입력설명
첫줄에 자연수 N(5<=N<=100)이 주어지고, 두 번째 줄에는 N개의 자연수가 주어진다.
학생의 번호는 앞에서부터 1로 시작해서 N까지이다.
-출력설명
첫줄에 평균과 평균에 가장 가까운 학생의 번호를 출력한다.
평균은 소수 첫째 자리에서 반올림한다.
-입력예제1
10
65 73 66 87 92 67 55 79 75 80
-출력예1
74 9
풀이:
1. 평균구한다. (소수 첫째 자리 반올림)
2. (평균- 각 리스트 값) 의 절대값이 가장 작은 리스트 값을 저장한다.
4. 만약 절대값이 같은 값이 있다면 큰 값을 저장
3. 평균 값 그리고 index+1 출력
import sys
#sys.stdin=open("input.txt", "rt")
#띄어쓰기로 두개의 데이터를 입력받
n = int(input())
a = list(map(int, input().split()))
ave = round(sum(a)/n)
min = 2147000000 # 21억 4700만, 정수형 크기의 가장 큰값 4바이트짜리 2의 31제곱
# idx 인덱스 번호, x는 점수
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)