Notice
Recent Posts
Recent Comments
Link
jyamethyst21 님의 블로그
백준 2108번- '통계학' (PYTHON 풀이) 본문
문제:

문제 설명대로 값을 입력받고 산술평균, 중앙값, 최빈값, 범위(최댓값-최솟값)를 출력하면 된다.
풀이:
from collections import Counter
N = int(input())
li = []
for i in range(N):
a = int(input())
li.append(a)
li.sort()
meann = round(sum(li)/N)
mediann = li[N//2]
counter = Counter(li)
freq = max(counter.values())
modes = []
for k,v in counter.items():
if v == freq:
modes.append(k)
modes.sort()
if len(modes) == 1:
mode_val = modes[0]
else:
mode_val = modes[1]
range = li[-1] - li[0]
print(int(meann))
print(mediann)
print(mode_val)
print(range)
Counter는 값의 등장횟수를 출력하는 역할을 한다. 딕셔너리처럼 작동하기 때문에 items, value가 다 먹힌다. 이를 활용하면 제일 어렵게 느낄 수 있는 빈도값도 쉽게 출력할 수 있다.
우선 값을 입력받은 뒤 정렬을 해주고, 평균은 전체 합계/길이로 구하고 중앙값은 전체 입력값을 2로 나누어서 그 값이 중앙값이 될테니 인덱싱으로 값을 출력한다. 그리고 빈도수는 Counter를 활용해서 값을 넣어준 다음 value만 비교를 해서 가장 큰 값을 변수에 넣어준다. 그 다음 반복문을 돌려서 가장 큰 값이 있는 키를 추출해서 새로운 리스트에 넣어준다. 이를 또 정렬해서 값이 두개 이상일 경우 두번째로 작은 값을 출력해주면 된다. 코드 자체가 어렵지 않아서 굳이 설명을 보지 않더라도 로직은 이해가 잘 될 것 같다.
아, 파이썬으로 돌리면 시간초과가 나서 pypy3로 하니 잘 해결되었다.
'CODING 💻' 카테고리의 다른 글
| 백준 2839번- '설탕 배달' (PYTHON 풀이) (0) | 2025.11.07 |
|---|---|
| 백준 1920번- '수 찾기' (PYTHON 풀이) (0) | 2025.11.06 |
| 백준 20920번- '영단어 암기는 괴로워' (PYTHON 풀이) (0) | 2025.11.04 |
| 백준 1037번- '약수' (PYTHON 풀이) (0) | 2025.11.03 |
| 백준 25192번- '인사성 밝은 곰곰이' (PYTHON 풀이) (1) | 2025.11.02 |
