728x90
https://www.acmicpc.net/problem/2108
문제 풀이
수학적인 능력을 물어보는 구현 문제이다.
문제에서 물어보는 대로 따라가면 된다.
산술평균 : n개의 수를 합 합해서 n으로 나눈 뒤 반올림하면 된다.
statistics 라이브러리에 있는 mean() 함수를 써도 상관은 없는데 오히려 메모리와 시간을 잡아먹는다.
중앙값 : n이 무조건 홀수로 주어지기 때문에 (n+1)/2 -1 이 무조건 중앙값이다!
최빈값 : 빈도를 따지기 위해서 딕셔너리를 사용했다. key (숫자) : value (빈도수)
최고 빈도를 구하고 loop를 돌려 최고 빈도가 아닌 키값 쌍을 지워버리면 된다.
남아있는 딕셔너리의 key(value도 상관없음)의 개수가 1이 아니면 유일한 최빈값이 아니므로
정렬했을 때 2번째 값이 최빈값이 된다. 유일하면 남은 녀석이 최빈값.
범위 : 최댓값에서 최솟값을 빼면 된다.
느낀 점
c++로 풀 때는 최빈값이 정말 까다로웠는데 파이썬은 정말... 말도 안 되게 편리한 것 같다. 최빈값보다 산술평균과 중앙값 따지는 게 더 오래 걸렸다. 왜냐하면 파이썬 문법을 잘 몰라서...
코드
import sys
n = int(sys.stdin.readline())
num = [int(sys.stdin.readline()) for i in range(n)]
dict = {}
for i in num:
if i in dict: dict[i] += 1
else: dict[i] = 1
max_cnt = max(dict.values())
for i in num:
if i in dict and dict[i] != max_cnt:
del dict[i]
mode = sorted(dict)[0] if len(dict.keys()) == 1 else sorted(dict)[1]
print(round(sum(num)/n))
print(sorted(num)[int((n+1)/2-1)])
print(mode)
print(max(num) - min(num))
'문제 풀이 > 백준(BOJ)' 카테고리의 다른 글
[Python] 백준 11659번 : 구간 합 구하기 4 (0) | 2022.06.24 |
---|---|
[Python] 백준 10815번 : 숫자 카드 (0) | 2022.06.22 |
[Python] 백준 14501번 : 퇴사 (0) | 2022.06.21 |
[Python] 백준 1026번 : 보물 (0) | 2022.06.18 |
[C++] 백준 4358번 : 생태학 (0) | 2022.01.20 |
댓글