반응형
이번 포스팅은 2108번인데요. 별거 아닌데 맞왜틀 시전하느라 시간을 잔뜩 써서 백준 풀이 포스팅이 늦었습니다.
https://www.acmicpc.net/problem/2108
2108번: 통계학
첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.
www.acmicpc.net
import sys
def get_frequent_num(num : list):
add_num = abs(min(num))
for i in range(len(num)):
num[i] += add_num
cnt = [0 for i in range(4001+add_num)]
for i in num:
cnt[i] += 1
max_cnt = max(cnt)
frequent_list = []
for i in range(len(cnt)):
if max_cnt == cnt[i]:
frequent_list.append(i)
for i in range(len(num)):
num[i] -= add_num
if len(frequent_list) == 1:
return frequent_list[0]-add_num
else:
return frequent_list[1]-add_num
n = int(sys.stdin.readline())
num = []
for i in range(n):
num.append(int(sys.stdin.readline()))
num.sort()
print(round(sum(num)/n))
print(num[n//2])
print(get_frequent_num(num))
print(num[n-1]-num[0])
어째 최근 들어서 계속 counting sort만 사용하고 있는데요. 최근에 배운 거라고 뭐만 하면 이거부터 생각나니 고맙기도 하면서 좀 바리에이션을 늘리는 게 좋겠다는 생각도 드네요. 다음에는 quick sort를 꼭 제대로 배워보겠습니다. 제가 자꾸 틀렸던 부분은 2번째 출력인 중간값의 출력이었는데요. 알고 봤더니 N은 홀수만 나오더라고요. 저는 문제를 제대로 안읽어서 짝수도 나온다는 생각에 둘 다를 한 번에 할 수 있는 식을 만들었다고 생각했는데 그게 아니었습니다. 저거 하나 고치니까 바로 되더라고요. 여러분은 꼭 문제를 제대로 읽으시길 바랍니다. 문제 자체는 너무 간단하니까요. 꼭 저처럼 실수하지 마시길 바랍니다.
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ][Python]11650번 풀이 (0) | 2021.11.27 |
---|---|
[BOJ][Python]1427번 풀이 (0) | 2021.11.25 |
[BOJ][Python]2869번 풀이 (0) | 2021.11.20 |
[BOJ][Python]16139번 풀이 (0) | 2021.10.31 |