백준(BOJ) 문제 풀이

백준 1546번 문제(평균) 파이썬(Python) 풀이 [로밍맨]

로밍맨 2021. 7. 3. 00:01
728x90
반응형

문제 링크

www.acmicpc.net/problem/1546

 

1546번: 평균

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

www.acmicpc.net

 

정답 코드는 아래와 같습니다.

1
2
3
4
5
6
7
= int(input())
arr = [int(x) for x in input().split()]
= max(arr)
= 0
for item in arr:
    s += ((item/M) * 100)
print(s/n)
cs

 

모든 값에 대해서 특정한 연산을 적용하고 평균을 구하는 문제입니다.

요구하는대로 특정한 연산을 적용하고 평균을 구하도록 구현하였습니다.

아래 영상에서는 괜히 변수명 바꾸다가 삽질을 했네요;;

 

이 문제는 아래와 같은 정답도 존재합니다. 분배법칙을 이용한 것이죠.

1
2
3
4
5
= int(input())
arr = [int(x) for x in input().split()]
= max(arr)
= sum(arr)
print(s/M*100/n)
cs

 

728x90

 

모든 값에 특정한 연산을 적용하고 더하는 것이 아니라,

다 더한 다음에 특정한 연산을 적용한 것입니다.

분배법칙에 의하여 수학적으로 동일하기 때문에 정상적으로 동작하는 것을 알 수 있습니다.

또한 반복문 내부의 곱셈 연산이 모두 사라지기 때문에 속도도 훨씬 빠를 것을 기대할 수 있습니다.

 

한 가지 주의할 점은 컴퓨터에서는 실수를 근사값으로 처리하기 때문에 각 코드의 결과값이 동일하지 않습니다.

따라서 실수 연산에 대하여 오차 범위가 엄격한 경우, 수학적으로 동일한 표현이라고 하더라도 연산 순서에 따라 정답이 틀리는 경우가 발생할 수 있습니다.

python 에서는 overflow 가 발생하지 않지만, 다른 언어에서는 연산 순서가 바뀌게 되면 변수에 잠시 담기는 값도 바뀌기 때문에 overflow 가 발생하기도 하므로 이를 유의하며 코드를 작성해야 합니다.

 

풀이는 아래 영상을 참고 바랍니다.

www.youtube.com/watch?v=FabXf_RJMYI

 

저작권 라이선스: CC BY (출처만 표시하면 자유롭게 이용 가능)

728x90
반응형