본문 바로가기
Problem Solving/BOJ

[BOJ][Python]2108번 풀이

by NoiB 2021. 11. 24.
반응형

이번 포스팅은 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