안녕하세요. 지난 포스팅의 BOJ 3052번 : 나머지에서는 반복문과 리스트 자료형을 이용해서 문제를 풀어보았습니다. 특히, 저희는 리스트 압축(list compression)이라는 개념을 통해 여러 줄의 숫자를 하나의 리스트에 저장하는 쉬운 방법을 배웠습니다. 오늘도 역시 리스트 자료형을 활용하여 문제를 풀어보도록 하겠습니다.
핵심 포인트
- 1차원 배열 : 리스트 자료형
- 파이썬 리스트 함수 : sum() 함수와 max() 함수
제출 코드
N = int(input())
grade = list(map(int, input().split()))
max_grade = max(grade)
print((sum(grade) / max_grade * 100) / N)
해설
문제의 입력은 첫번째 줄에는 점수의 개수, 두번째 줄에는 점수의 개수만큼 점수가 들어오게 됩니다. 이때, 저희의 목표는 입력된 성적 중에서 가장 큰 점수를 찾고 각 점수를 문제의 조건에 따라 조작한 뒤 새로운 평균을 출력해야합니다. 이를 위해서 어떤 방법으로 점수를 조작하는 지 알아보도록 하죠.
일단, $x_{1}, x_{2}, \cdots, x_{N}$을 입력된 점수들이라고 가정하겠습니다. 그리고 $x_{max}$를 입력된 $N$개의 점수들 중 최대 점수라고 하죠. 문제에 따르면 각 점수는 $x_{max}$로 나눈 뒤 100을 곱한다고 되어있으므로 $i$번째 점수 $x_{i}$는 아래와 같이 변환됩니다.
$$x_{i}^{new} = \frac{x_{i}}{x_{max}} \times 100$$
이제 새로운 점수들의 평균 $\bar{S}^{new}$을 구해보도록 하죠.
$$\begin{align*} \bar{S}^{new} &= \frac{1}{N}\sum_{i = 1}^{N} x_{i}^{new} \\ &= \frac{1}{N}\sum_{i = 1}^{N} \frac{x_{i}}{x_{max}} * 100 \\ &= \frac{100}{x_{max}} \cdot \frac{1}{N} \sum_{i = 1}^{N} x_{i} \\ &= \frac{\bar{S}}{x_{max}} \cdot 100 \end{align*}$$
따라서, 저희는 기존의 점수의 평균 $\bar{S}$에 $\frac{100}{x_{new}}$를 곱하면 되는 것을 알았습니다. 마지막으로 코드 상에서 저희가 해줘야하는 것은 최대 점수인 $x_{max}$와 기존 점수의 평균인 $\bar{S}$를 구하는 것입니다. 반복문을 이용해서 구할 수도 있습니다만, 파이썬의 리스트 자료형에서는 이 과정을 max() 함수와 sum() 함수로 한줄로 처리할 수 있습니다.
참고자료 및 그림출처
'Programming > Coding Problem' 카테고리의 다른 글
BOJ 4673번 : 셀프 넘버 (0) | 2022.06.22 |
---|---|
BOJ 8958번 : OX퀴즈 (0) | 2022.06.12 |
BOJ 3052번 : 나머지 (0) | 2022.06.11 |
BOJ 2577번 : 숫자의 개수 (0) | 2022.06.11 |
BOJ 2562번 : 최댓값 (0) | 2022.06.10 |