*인프런 - 파이썬 알고리즘 문제풀이 (코딩테스트 대비) 강의를 공부한 내용을 바탕으로 작성했습니다.*
대표값
1. 문제
N명의 학생의 수학점수가 주어집니다. N명의 학생들의 평균(소수 첫째자리 반올림)을 구하고, N명의 학생 중 평균에 가장 가까운 학생은 몇 번째 학생인지 출력하는 프로그램을 작성하시오.
평균과 가장 가까운 점수가 여러 개일 경우 먼저 점수가 높은 학생의 번호를 답으로 하고, 높 은 점수를 가진 학생이 여러 명일 경우 그 중 학생번호가 빠른 학생의 번호를 답으로 합니다.
2. 입력예제
10
45 73 66 87 92 67 75 79 75 80
3. 출력예제
74 7
예제설명)
평균이 74점으로 평균과 가장 가까운 점수는 73(2번), 75(7번), 75(9번)입니다. 여기서 점수가 높은 75(7번), 75(9번)이 답이 될 수 있고, 75점이 두명이므로 학생번호가 빠른 7번이 답이 됩니다.
🥕해결 point
1. 학생점수와 평균 점수간의 점수 차 구하기
먼저, N명의 학생의 점수와 평균 점수의 차이를 구하는 것이 우선이다.
👉 | 학생 점수 - 평균 점수 | = abs(x- avg)
2. 평균과 가장 가까운 점수 찾기
이제는 평균 점수와의 차이가 가장 작은 점수를 구할 차례다.
❗️예제 설명대로 평균과 가까운 점수는 여러개일 수 있다! 이때 높은 점수, 학생 번호가 빠를 수록 우위에 있음을 기억하자!
👉 조건문으로 구분해서 대표값을 찾자
1. | 학생 점수 - 평균 점수 | 가 같은 점수가 없을 때
2. | 학생 점수 - 평균 점수 | 가 같은 점수가 여러 개 일때
case 1. 높은 점수가 우위
case 2. 점수가 같을 때, 학생 번호가 빠른 점수가 우위
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
n = int(input())
scores = list(map(int, input().split()))
avg = sum(scores)/n + 0.5
avg = int(avg)
min = 21470000 #min=float('inf')
for idx, x in enumerate(scores):
tmp = abs(x-avg)
if tmp < min:
min = tmp
avg_close_score = x
index = idx+1
elif tmp == min:
if x > avg_close_score:
avg_close_score = x
index = idx+1
print("%d %d" %(avg, index))
|
cs |
'Coding > 코딩테스트 공부' 카테고리의 다른 글
백준 19238번 문제 - BFS & 구현 (0) | 2025.02.17 |
---|---|
[이.코.테] chap13. DFS/BFS - 특정 거리의 도시 찾기 (0) | 2022.07.29 |
[이.코.테] chap11. 그리디 - 만들 수 없는 금액 (1) | 2022.07.20 |
[코드 리뷰] 자료구조&알고리즘 - 2강 실습(2) 리스트에서 원소 찾아내기 (0) | 2022.06.28 |
[알고리즘(Python)/코테공부] 뒤집은 소수 (0) | 2022.01.27 |