반응형
코딩 테스트 30일 챌린지
푼 문제 수 : 1
문제 요약
n명의 학생의 평균(소수 첫짜리 반올림)을 구하고, 평균에 가장 가까운 학생은 몇 번째 학생인지 구하라.
입, 출력 예제
입력 :
10
45 73 66 87 92 67 75 79 75 80
출력 :
74 7
풀이
n = int(input())
a = list(map(float, input().split()))
avg=round(sum(a)/n)
min = 2147000000
for idx, x in enumerate(a):
tmp=abs(x-avg)
if tmp<min:
min=tmp
score=x
res=idx+1
elif tmp==min:
if x>score:
score=x
res=idx+1
print(avg, res)
위에는 전체적인 코드고 아래는 풀이다.
주석으로 각 코드의 설명을 달아두었다.
# round()를 사용해서 소수 첫째 자리에서 반올림한다.
# sum()을 사용해서 평균을 구하기 위해서 값을 더한다..
avg=round(sum(a)/n)
# 비교를 위해서 정수 자료형의 최대값을 min으로 준다.
min = 2147000000
# idx는 인덱스(학생 번호), x에는 리스트에 있는 값(성적)이 들어간다.
for idx, x in enumerate(a):
# tmp 임시 변수로 abs()함수를 통해 절대값을 구한다. tmp의 값이 가장 작아야 평균에 가장 가까운 값이다.
tmp=abs(x-avg)
# tmp가 읽을 최소 값 설정.
if tmp<min:
# 작은 값을 유지하기 위해 더 작은 값을 넣는다.
min=tmp
# socre에 점수 값도 가지고 있어야 한다. 거리가 같을 떄 답에 대한 값도 출력해야 한다.
score=x
#0번 인덱스를 가진 학생의 실제 번호는 1번이다.
res=idx+1
# tmp(거리가) 같은 경우에 점수가 큰 학생이 답이 되기 위해 if를 넣는다.
elif tmp==min:
# x는 현재 학생의 점수, score는 이전 학생의 점수
if x>score:
# 점수가 큰 현재 학생의 점수를 score에 넣어 갱신
score=x
#점수가 큰 학생으로 바꾸기 위해 +1
res=idx+1
# 평균과 학생 번호를 출력
print(avg, res)
반응형
'챌린지 > 코딩 테스트 30일 챌린지' 카테고리의 다른 글
[코딩 테스트 30일 챌린지] : 06 (0) | 2022.06.17 |
---|---|
[코딩 테스트 30일 챌린지] : 05 (0) | 2022.06.16 |
[코딩 테스트 30일 챌린지] : 03 (0) | 2022.06.14 |
[코딩 테스트 30일 챌린지] : 02 (0) | 2022.06.13 |
[코딩 테스트 30일 챌린지] : 01 (0) | 2022.06.12 |
댓글