본문 바로가기
알고리즘?/기본2

4. 대표값 eumerate()

by 몰라닉네임 2023. 5. 4.

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)

'알고리즘? > 기본2' 카테고리의 다른 글

8. 뒤집은 소수  (1) 2023.05.06
6. 자릿수의 합  (0) 2023.05.05
5. 정다면체  (0) 2023.05.05
3. k번째 큰수 set()  (0) 2023.05.04
2. k번째 수  (0) 2023.05.04