본문 바로가기

코딩테스트 with PYTHON

[python] 코딩테스트 대비 - 대표값 찾기

문제)

 

 

선수지식 및 답안코드)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#[선수지식] - 최솟값 구하기
arr=[5,3,7,9,2,5,2,6]#배열에서 가장 작은 값을 찾아보자
arrMin=float('inf')#변수에 무한대 숫자 저장, 배열 첫번째 요소를 저장해도 됨.
 
#for i in arr: 로도 접근 가능.
for i in range(len(arr)):# 배열 수를 하나씩 접근하며 가장 최소값 찾기
    if arr[i]<arrMin:# <= 연산자 사용시 뒤에 있는 2가 탐색됨. (같은 2 라도 위치가 다름)
        arrMin=arr[i]
print(arrMin)
 
 
###############문제 답안#############
import sys
#sys.stdin=open("input.txt","rt")
 
N=int(input())#학생 수 입력 받기
box=list(map(int,input().split()))#점수 입력받기
 
 
#소수 첫째 자리에서 반올림 하는 방법
#파이썬의 round 함수는 round_half_even 방식을 사용하므로
#0.5를 더해 int형 변환으로 소수를 버리는 방식으로 진행.
mean=int((sum(box)/N)+0.5)
 
min_interval=2147000000#무한대 수 저장
 
#평균과 가장 가까운 학생 찾기(최소값 찾기 원리와 동일)
for idx,score in enumerate(box):#인덱스 번호와 점수 동시 접근
    res=abs(score-mean)#평균과 차이의 절대값
    if res<min_interval:#최소 값보다 차이가 작으면 해당 학생 선택
        min_interval=res
        index=idx+1
        grade=score
    elif res==min_interval:#같으면 점수 비교해서 큰 점수를 가진 사람 선택(점수도 같다면 학생번호가 먼저인 학생 선택)
        if score>grade:
            index=idx+1
            grade=score
            
print(mean, index)#결과 출력
    
cs