Engineering Note

대표값 본문

Problem Solving/파이썬 알고리즘 문제풀이(코딩테스트 대비)

대표값

Software Engineer Kim 2021. 5. 29. 23:12

it 취업을 위한 알고리즘문제풀이

문제

코드

import sys
#sys.stdin = open("input.txt","rt")

n = int(input())
grade = list(map(int,input().split()))
delta = [0]*len(grade)
cnt = 0
minNum = 9999999
avg = 0
sum = 0
for i in range(len(grade)):
   sum += grade[i]



avg = int(sum/n + 0.5)
#print(avg)

min = float('inf')
for i in range(len(grade)):
   delta[i] = abs(grade[i] - avg)
   if(delta[i]< min):
       min = delta[i]

#print(min)

for i in range(len(grade)):
   if(min == delta[i]):
       cnt += 1
       if cnt>1:   #최소 차이의 점수인 곳이 하나 더 있다면 점수를 비교
           if temp <grade[i]:
               temp = grade[i]
               minNum = i                
       else:
           temp = grade[i]
           minNum = i

print(avg, minNum+1)
import sys
sys.stdin = open("input.txt","rt")

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

avg = int(sum(grade)/n + 0.5)
min = 2147000000
for idx in range(n):
    delta = abs(grade[idx] - avg)
    if delta < min:
        min = delta
        minNum = idx + 1
        maxGrade = grade[idx]
    elif delta == min:
        if grade[idx] > maxGrade:
            maxGrade = grade[idx]
            minNum = idx + 1

print(avg, minNum)

문제해결방법1

  • 첫 번째 방법
    • 평균을 구하고 각 점수와 평균과의 차를 각각 구해서 delta 리스트에 저장하고 최소 차의 값을 구한다.
    • delta 리스트에서 0번 인덱스부터 평균과의 최소차를 저장한 변수 min과 비교하면서 같은 값이 나오면 해당 점수(temp)와 인덱스를 기록해둔다. 그리고 다음 인덱스에서 min과 같은 값이 나오면 이때 앞에서 나온 temp와 현재 점수를 비교하여 현재 점수가 더 크다면 temp에 현재 점수를 다시 저장하고 해당번호도 기록해둔다. 그리고 다시 min과 같은 점수차가 나왔을 때 해당 점수가 temp와 같은 경우에는 아무 일도 진행하지 않는다. 문제의 주어진 조건에서 점수가 같은 경우에는 작은 번호를 출력하라고 했기 때문이다.
    • 여기서 min과 같은 점수차가 있고 해당 점수가 같은 점수가 또 나올 경우에는 클 경우 조건만 처리하도록 하여 조건문을 구성하면 같은경우에는 아예 아무일도 하지 않도록 할 수 있다.
  • 두 번째 방법
    • 평균과의 차를 구하면서 최소값을 매번 갱신하면서 구하고 동시에 이 최소값과 같은 값이 나온다면 다시 이전의 점수와 현재의 점수를 비교해서 현재의 점수가 클 경우에 현재 점수와 번호를 기록해둔다.

'Problem Solving > 파이썬 알고리즘 문제풀이(코딩테스트 대비)' 카테고리의 다른 글

정다면체  (0) 2021.05.30
자릿수의 합  (0) 2021.05.30
K번째 큰 수  (0) 2021.05.29
K번째 작은수  (0) 2021.05.12
K번째 약수  (0) 2021.05.12
Comments