본문 바로가기

Python 코딩테스트

정렬: 백준 2108 파이썬

반응형

문제: https://www.acmicpc.net/problem/2108

 

2108번: 통계학

첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.

www.acmicpc.net

 

정답: 

from collections import Counter
import sys

n = int(sys.stdin.readline())

array = []
for i in range(n):
    array.append(int(sys.stdin.readline()))

# 산술평균
print(round(sum(array)/n))

# 중앙값
sorted_array = sorted(array)
print(sorted_array[n//2])

# 최빈값
def modefinder(array):
    c = Counter(array)
    order = c.most_common()
    maximum = order[0][1]

    modes = []
    for num in order:
        if num[1] == maximum:
            modes.append(num[0])

    return modes


result = modefinder(array)

if len(result) >= 2:
    print(sorted(result)[1])
else:
    print(result[0])

# 범위
range = (max(array) - min(array))
print(range)

 

후기:

이 문제에서 최빈값을 구하는데 시간이 많이 걸렸다. 처음엔 collections 모듈의 Counter 클래스를 사용하지 않고

구하려고 했지만 잘 되지 않았고, 구글링을 해서 Counter 클래스를 사용해 구했다.

나머지 평균, 중앙값, 범위는 큰 어려움 없이 해결했다.

 

앞으로 알고리즘 문제를 풀때는 2시간 시간제한을 두고, 풀리지 않는다면 내가 풀지 못하는 문제라고 판단하고

구글링을 해서 답을 이해하는 식으로 문제를 풀어나가야 할 것 같다.

단, 구글링을 했던 문제는 며칠 텀을 두고 다시 풀어보는 방식으로 공부를할 계획이다. 

무작정 풀다보니 한 문제에 할애하는 시간도 너무 많고, 스스로 지치기도 하는 문제가 발생해서 방식을 바꿔보기로 했다.  

반응형

'Python 코딩테스트' 카테고리의 다른 글

정렬: 백준 11651 파이썬  (0) 2021.08.29
정렬: 백준 11650 파이썬  (0) 2021.08.29
정렬: 백준 18868 파이썬  (0) 2021.08.23
정렬: 백준 11004 파이썬  (0) 2021.08.23
DFS/BFS: 백준 1260 파이썬  (0) 2021.08.18