하루한줄 코딩일기

[인프런 - 파이썬 알고리즘 문제풀이] 2.4 대표값 본문

Algorithm

[인프런 - 파이썬 알고리즘 문제풀이] 2.4 대표값

jjuha 2022. 1. 24. 20:35

인프런 > 파이썬 알고리즘 문제풀이

섹션 2.4 대표값

👊 내 문제 풀이

1. 평균값을 구한다. (round() 함수를 사용해 반올림)

2. |평균과의 점수차| 의 최솟값을 min 변수에 저장한다.

3. |평균과의 점수차| 가 min과 같은 경우, temp 리스트에 점수를 저장한다.

4. temp 리스트의 점수들 중 가장 높은 수를 구해 해당 점수를 보유한 학생의 번호를 출력한다. (여러 명일 경우 앞 번호의 학생을 출력한다.)

n = int(input())
scores = list(map(int, input().split()))

average = round(sum(scores)/n)	#평균 반올림
min = 100
temp = []

# '평균과의 점수차 절대값'이 가장 작은 경우를 구해 min 변수에 저장
for i in range(n):
	if abs(scores[i]-average) < min:
		min = abs(scores[i]-average)

# '평균과의 점수차 절대값'이 min인 경우의 점수들을 temp 리스트에 저장
for i in range(n):
	if abs(scores[i]-average) == min:
		temp.append(scores[i])

# temp의 숫자들 중 가장 큰 숫자를 가진 학생의 번호 출력 (여러 명일 경우 앞 번호의 학생)
for i in range(n):
	if scores[i] == max(temp):
		print(average, i+1)
		break;

채점 결과

 

💡 강의 해답

파이썬에서의 round 함수는 round_half_even 방식을 택한다.

ex) a=4.500 인 경우, round 함수는 짝수값으로 근삿값을 반환하기 때문에 round(a)는 4가 된다.

따라서 해당 풀이에서는 round 함수를 사용하지 않고 0.5를 더해 정수로 변환하는 방식을 택한다.

 

이 외에도 반복문 한 번에 모든 과제를 수행하여 내 풀이보다 효율적인 알고리즘 같다.

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):	#index 값, value 값
    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)
Comments