파이썬/코딩테스트

[Do-it 코딩 테스트] 002. 평균 구하기(2750)

거북이07 2023. 10. 26. 16:27

문제

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

저작권 문제로 링크 참고

 

1546번: 평균

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

www.acmicpc.net


코드

내가 작성한 코드

num = int(input())
arr = list(map(int, input().split()))
maxNum = max(arr)
arr2 = []
sum = 0
for i in arr:
    arr2.append((i / maxNum) * 100)
for j in arr2:
    sum += j
print(sum / num)

해석

num = int(input())

위 입력예제를 보면 N개의 수를 입력하기 전에 몇개의 수를 받을지 입력하는 부분이 있어 input() 함수 사용하여 값을 받아주었고 input()은 기본적으로 문자열로  들어와 int()로 input()을 감싸 정수로 형변환을 진행해주었다.

arr = list(map(int, input().split()))

입력받은 문자열을 공백 기준으로 슬라이스 해주기 위해 input().split() 함수를 사용해 주었고 여기서 그냥 split만 하면 값이 str 즉 문자열 타입으로 들어가므로 map을 이용하여 슬라이스 한 값을 int로 변환 후 list로 감싸 다시 배열로 만들어주었다. 만약 여기서 list로 감싸지 않으면 map 객체로 들어가기 때문에  감싸줘야 한다.

split()은 안에 아무것도 쓰지 않으면 ' ' 공백 기준으로 슬라이스가 된다.
maxNum = max(arr)
arr2 = []
sum = 0

문제에서 받은 점수 중  제일 큰값을 기준으로 계산을 해주어야해서 maxNum이라는 변수에 max()함수를 이용하여 arr 리스트에서 가장 큰 값을 넣어주었다.

 

점수를 다시 계산 후 append 해줄 변수가 필요하기 때문에 arr2라는 빈 리스트를 선언해 주었으며 점수를 전부 합친 금액을 담을 수 있는 sum 변수를 선언 후 0으로 초깃값을 설정해 주었다.

for i in arr:
    arr2.append((i / maxNum) * 100)
for j in arr2:
    sum += j
print(sum / num)

 

원래 점수가 들어있는 arr 리스트를 반복문을 이용하여 i에 값을 한개씩 담아주고 미리 만들어놨던 arr2(수정 후 점수 리스트)에 i(원래 점수) / maxNum(최고 점수) * 100 해당 식을 이용하여 점수를 수정 후 넣어주었다.

 

그 후 반복문을 한 번 더 하여 만들어놨던 sum 변수에 j에 들어가 있는 값을 다 더해주고 구해준 평균을 출력해 주었다.