> 수학
> 구현
> 정렬
시간 초과가 나서
input() -> readline()으로 바꿈.
1. 산술평균
처음에는
아래와 같이 작성했다.
그러나 바로 직전에 풀었던 문제가 떠올랐다..
부동 소수점 문제가...
여기서도 어쩔 수 없이 소수가 나오기 마련이다.
그리고 round 함수는 우리가 알고 있는 반올림과는
큰 차이가 있다.
예시를 들어보자.
1.5를 반올림하면 -> 2
2.5를 반올림하면 -> 3
위 같은 결과가 나와야한다.
하지만 round 함수를 쓰면
1.5는 -> 2
2.5도 -> 2
위 같은 결과가 나온다.
띠용(?!)
우리가 알고 있는 방식은 "사사오입 방식"이라고 한다.
즉 0.5, 0.6처럼 절반 이상일 땐 반올림을 진행하고
그 이외엔 버리게 되는 형식이다.
그러나 round 함수는
"오사오입 방식"이다.
5 미만의 숫자는 내리고 , 5 초과의 숫자는 올린다.
5의 앞자리가 만약 짝수면 내리고, 홀수면 올린다.
1.5인 경우에는 1이 홀수니까 올려서 2가 된다.
2.5인 경우에는 2가 홀수니까 내려서 2가 되는 것이다.
아래 코드는 해결방법 ^0^
만약 주어진 수가 양수이면서 실수이면?
반올림을 하려면 그 값에 0.5를 더해주고 정수형으로 바꿔주면 된다.
왜냐하면 3.5를 반올림하면 4가 나와야하는데,
round를 쓰게 되면 4가 나온다.
이 경우엔 round를 써도 원하는 값이 나오긴 한다.
하지만 여기에 0.5를 더해줘도 최종값은 변함이 없어서
따로 나눠서 줄 필요는 없다.
마찬가지로
2.5를 반올림하면 3이 나와야 하는데,
round를 쓰게 되면 2가 나온다.
따라서 2.5에 0.5를 더해줘야 3이 나오게 된다.
음수인 경우는 0.5를 빼줘야한다.
-3.5를 반올림하게 되면 -4가 되어야한다.
3.5를 반올림하면 4고 여기에 음수부호만 붙여주면 반올림이 된다.
따라서
양수일때처럼 0.5를 더해주는 건 같으나
최종부호를 +에서 -로 바꿔주는 과정이 들어간다.
s = int(sum(array))
if s >= 0:
print(int(s / n + 0.5))
else:
print(int(s / n - 0.5))
round 사용시 주의해서 사용하자!
print(round(sum(array) / n))
2. 중앙값
: 이미 데이터를 받아올 때 정렬했으니 따로 다시 정렬해줄 필요는 없다.
중앙값은 숫자개수 / 2 -> 인덱스의 값을 가져오면 된다.
3. 최빈값
: n개의 수들 중 가장 많이 나타나는 값을 구하는 방식이다.
나는 일단 temp라는 딕셔너리에다가
해당 숫자들이 각각 몇개가 존재하는 지 저장했다.
temp[array 배열값] = array 배열값의 총 개수
그리고 answer이라는 배열에 최빈값을 저장한다.
만약 answer이라는 배열의 길이가 2 미만이면 answer[0] 출력
2 이상이면 answer[1]을 출력해주면 된다.
4. 범위 - 최댓값과 최솟값의 차이 (절댓값 출력**)
import sys
n = int(sys.stdin.readline())
array = sorted([int(sys.stdin.readline()) for _ in range(n)])
# 1. 산술평균
s = int(sum(array))
if s >= 0:
print(int(s / n + 0.5)) # int(3.3) -> 3 , 정수부분만 가져옴. 소수는 버린다.
else:
print(int(s / n - 0.5))
# 2. 중앙값
print(array[n // 2])
# 3. 최빈값
temp = dict()
for i in array:
if i in temp:
temp[i] += 1
else:
temp[i] = 1
answer = []
cnt = 0
for key in temp:
if cnt <= temp[key]:
if cnt == temp[key]:
answer.append(key)
cnt = temp[key]
else:
cnt = temp[key]
answer = [key]
if len(answer) < 2:
print(answer[0])
else:
print(answer[1])
# 4. 범위
print(abs(array[-1] - array[0]))
'여니의 취준 준비 > 코딩테스트 (Python)' 카테고리의 다른 글
[2792] 보석상자 in python (0) | 2022.03.06 |
---|---|
[2805] 나무 자르기 in python (0) | 2022.03.06 |
[2417] 정수 제곱근 In python (0) | 2022.03.04 |
[1789] 수들의 합 In python (0) | 2022.03.04 |
[2667] 단지번호붙이기 In python (0) | 2022.03.02 |