하루한줄 코딩일기
[인프런 - 파이썬 알고리즘 문제풀이] 2.4 대표값 본문
섹션 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)
'Algorithm' 카테고리의 다른 글
[백준] 1단계: 입출력과 사칙연산(1~13번) - 파이썬(Python) (0) | 2022.01.24 |
---|---|
[인프런 - 파이썬 알고리즘 문제풀이] 2.5 정다면체 (0) | 2022.01.24 |
[프로그래머스] 두 개 뽑아서 더하기(LV.1) - 파이썬(Python) (0) | 2022.01.24 |
[인프런 - 파이썬 알고리즘 문제풀이] 2.3 K번째 큰 수 (0) | 2022.01.24 |
[인프런 - 파이썬 알고리즘 문제풀이] 2.2 K번째 수 (0) | 2022.01.24 |
Comments