Practice/알고리즘

파이썬 알고리즘 : 대표값 구하기

밍미a 2022. 11. 15. 15:21
728x90

알고 넘어가야 할 파이썬 이론:

최소값 구하기 알고리즘:

# 최소값 구하기

arr = [5,3,7,9,2,5,2,6]
arrMin = float('inf')

for x in arr:
    if x < arrMin:
        arrMin = arr[x]
        print(arrMin)

 

 


오늘 배운 내용

내가 생각한 문제풀이 : 

내가 생각한 문제풀이:

N명의 학생수의 점수들로 평균을 구하고 for문 과 if문을 이용해서 평균과 가장 가까운 학생을 구할 수 있을 것 같은데..

# 대표값 구하기

#입력예제 :
# 10
# 45 73 66 87 92 67 75 79 75 80

#출력예제 :
# 74  7

n = int(input())
score_list = list(map(int,input().split()))
avg = 0
sum = 0
#평균을 먼저 구하고
for i in range(len(score_list)):
    sum += score_list[i]
    avg = round(sum / len(score_list))

print(avg)

# 학생들의 점수에서 평균을 뺀 배열을 다시 만들자..!
avg_list = []
for x in score_list:
    avg_list.append(x - avg)

print(avg_list)
#그리고 거기서 0과 가까운 값을 어떻게 구하지...??? 모르겠다..ㅜㅠ

내가 작성해본 코드..

저기서 0과 가까운 값을 절대값으로 찾아서 그 절대값의 최소값을 뽑아내면 답 나올 것 같은데... 알듯말듯 

 

더보기

정답 코드

 

n = int(input())
a = list(map(int,input().split()))
ave = int(sum(a)/n + 0.5)
min = 2147000000

for idx,x in enumerate(a):
  
    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)

 

더보기

코드 분석

# 대표값 구하기

#입력예제 :
# 10
# 45 73 66 87 92 67 75 79 75 80

#출력예제 :
# 74  7


n = int(input())
a = list(map(int,input().split()))
ave = int(sum(a)/n + 0.5) # 0.5를 더해서 반올림 해주고, int화를 시켜서 소수점이 나오지 않도록 출력한다.
min = 2147000000 #제일 큰 수를 임의로 지정해준다.

for idx,x in enumerate(a):
    #a의 인덱스 값을 idx에 넣어주고 x에 a 리스트의 값을 넣어서 대응해주는 함수 enumerate()
    tmp = abs(x-ave)
    if tmp < min :
        min = tmp
        score = x
        res = idx+1 #학생번호 인데 인덱스가 0번부터 시작하니까 +1을 해주어야 한다.
    #답이 2개인 경우 구현
    elif tmp == min:
        if x>score :
            score = x
            res = idx + 1
print(ave, res)

더 배울 내용

 


느낌점

조금씩 코드를 쓰는것을 알 것 같은 느낌이 든다.

처음에 할 때는 한글로만 생각했는데 오늘은 그래도 코드를 조금이라도 끄적여볼 수 있었다.

조금씩 느는것이 느껴지니까 알고리즘 공부하는데 너무나 신이났다.