https://www.acmicpc.net/problem/1546
(브론즈 1 문제)
입력
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의 평균에 계산식을 적용해도 같은 결과가 나온다.
내 경우에는 하나하나 다 산출하고 다시 계산하는 방식으로 수행했지만, 여기는 먼저 기입한 점수의 평균을 구하고 평균에 대해서만 문제의 계산식을 적용해 훨씬 깔끔하게 구현했다.
배운 점
단순히 조건이 나왔다고 해서 조건대로 구현할 필요가 없다. 아직도 부족한 능력이지만 수학적 계산을 통해서 줄일 수 있다면 줄이는 과정을 먼저 수행하고 계산하는 것이 훨씬 간단하게 구현할 수 있다.
'알고리즘 공부 > 알고리즘 구현 기초' 카테고리의 다른 글
백준) 상수-파이썬 (0) | 2023.07.18 |
---|---|
백준)알파벳 찾기-파이썬 (0) | 2023.07.17 |
백준) 바구니 뒤집기-파이썬 (0) | 2023.06.23 |
백준) 과제 안 내신분...?-파이썬 (0) | 2023.06.23 |
백준) 공 바꾸기-파이썬 (0) | 2023.06.22 |