본문 바로가기

알고리즘 공부/알고리즘 구현 기초

백준) 평균-파이썬

https://www.acmicpc.net/problem/1546

(브론즈 1 문제)

 

1546번: 평균

첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보

www.acmicpc.net

입력

1.

3
40 80 60

2.

3
10 20 30

3.

5
1 2 4 8 16

출력

1.

75.0

2.

66.666667

3.

38.75

내 코드

# 시험 본 과목의 수
N=int(input())

#성적 입력 받기
data=list(map(int,input().split()))

#성적 계산
k=0
a=max(data)
result=[]
for i in range(N):
    b=data[i]/a*100
    result.append(b)
    k+=result[i]
print(k/N)

풀이(생각 과정)

시험본 과목 수를 N으로 정의하고 성적을 1줄로, 리스트 형태로 입력을 받기 위해서 list(map(int,input().split())을 사용했다.

 

성적 계산의 경우 성적 합을 k 변수에 저장할 용도로 k=0으로 초기화하고 최댓값을 a 변수를 통해 미리 저장시켜둔다.

그 후 특정 계산식을 수행한 결과 값을 받을 result 리스트를 생성하고 특정 계산을 반복문을 통해 수행시켜 result 리스트에 저장시킨다. 그리고 저장 값들을 k 변수에 계속해서 더하고 마지막 출력에서 합에 과목수를 나누어서 출력했다.

다른 풀이

subject = int(input())
score = list(map(int, input().split()))
M = max(score)
average = (sum(score) / subject) / M * 100
print(average)

subject 변수를 시험 본 과목의 수로 정의하고 score을 점수 입력으로 받는다. max 함수를 이용해서 score 내 최댓값을 가져와 저장하는 것까진 유사하다.

 

평균 계산에서 반복문을 사용하지 않고 수학적 계산으로 score의 평균에 계산식을 적용해도 같은 결과가 나온다.

 

내 경우에는 하나하나 다 산출하고 다시 계산하는 방식으로 수행했지만, 여기는 먼저 기입한 점수의 평균을 구하고 평균에 대해서만 문제의 계산식을 적용해 훨씬 깔끔하게 구현했다.

배운 점

단순히 조건이 나왔다고 해서 조건대로 구현할 필요가 없다. 아직도 부족한 능력이지만 수학적 계산을 통해서 줄일 수 있다면 줄이는 과정을 먼저 수행하고 계산하는 것이 훨씬 간단하게 구현할 수 있다.