문제
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에 들어가 있는 값을 다 더해주고 구해준 평균을 출력해 주었다.
'파이썬 > 코딩테스트' 카테고리의 다른 글
[Do-it 코딩 테스트] 006. 연속된 자연수의 합 구하기(2018) (0) | 2023.10.30 |
---|---|
[Do-it 코딩 테스트] 004. 숫자의 합 구하기2(11660) (0) | 2023.10.27 |
[Do-it 코딩 테스트] 003. 구간 합 구하기1(11659) (0) | 2023.10.26 |
[Do-it 코딩 테스트] 001. 숫자의 합 구하기(11720) (1) | 2023.10.26 |
[Do-it 코딩 테스트] 000. 수 정렬하기(2750) (1) | 2023.10.26 |