1. 문제
# N명의 학생 점수가 주어짐
# 학생의 평균 (소수 첫째자리 반올림) 을 구하고
# N명의 학생 중 평균에 가장 가까운 학생은 몇번째 학생인지 출력
# 평균과 가장 가까운 점수가 여러개일 경우 높은 학생의 번호 출력
# 평균과 가까운 점수가 여러개 인 경우 점수가 높은 학생을 출력
# 높은 점수를 가진 학생이 여러 명일 경우 학생 번호 빠른 학생 점수를을 출력
2. 풀이
# 방법1
import sys
# sys.stdin=open("input.txt", "r")
n = int(input()) # 첫줄엔 학생 수 n (5~100) 이 주어짐
ls = list(map(int, input().split())) # 두번째 줄엔 각 학생의 수학점수가 주어짐
avg = round(sum(ls)/len(ls)) # 점수 평균
dif = abs(avg-ls[0]) # 점수차이 절대값
score = ls[0] # 학생 점수
stu_number = 1 # 학생 번호
for i in range(1, n):
if dif > abs(avg-ls[i]): # 차이가 더 작으면 해당값을 출력
dif = abs(avg-ls[i])
score = ls[i]
stu_number = i+1
elif dif == abs(avg-ls[i]): # 차이가 같다면
if score < ls[i]: # 점수가 더 높은 학생 출력
score = ls[i]
stu_number = i+1
# 높은 점수를 가진 학생일 경우 학생 번호가 빠른 학생 출력 (따로 구현할 필요 없음)
print(avg, stu_number)
# 방법 2
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)
3. 배운 내용
1) int(3.14): 3 반환. 정수 변환시 소수점 버림
2) round(3.14): 두번째 인자가 없으면 소수점 첫째자리에서 반올림. 3 반환
3) round(3.1415, 2) : 소수점 셋째 자리에서 반올림. 3.14 반환
4) round(31.41, -1): 1의 자리에서 반올림. 30 반환
5) for idx, x in enumerate(list): list 값의 인덱스와 값을 반환
6) 단, round() 함수는 반올림 하는 자리가 정확히 절반인 5일경우 내림하는 half even 방식
'백앤드 개발 > 코딩테스트' 카테고리의 다른 글
[파이썬 문제 풀이] 소수 (1) | 2023.10.10 |
---|---|
[파이썬 문제풀이] 자릿수의 합 (0) | 2023.10.10 |
[파이썬 문제풀이] 정다면체 (1) | 2023.10.07 |
[파이썬 문제 풀이] k번째 큰 수 (1) | 2023.10.05 |
[파이썬 문제 풀이] K번째 약수 (1) | 2023.10.05 |