반응형
문제: 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 |