2025. 10. 10. 16:08 Baekjoon(Python)/단계별로 풀어보기(Python)

Baekjoon(Python)/단계별로 풀어보기(Python)

[백준][18단계 심화 2] 2108번 /통계학 (파이썬/Python)

junslee 2025. 10. 10. 16:08

1. 문제 설명

 

 

2. 코드

import sys
from collections import Counter

input = sys.stdin.readline
N = int(input())
nums = list(int(input()) for _ in range(N))
# 1) 산술 평균
avg = round(sum(nums)/N)
# 2) 중앙값
nums.sort()
median = nums[N//2]
# 3) 최빈값
cnt = Counter(nums)
max_freq = max(cnt.values())
modes = [x for x, f in cnt.items() if f == max_freq]
modes.sort()
mode = modes[0] if len(modes) == 1 else modes[1]
# 4) 범위
rng = nums[-1] - nums[0]

print(avg)
print(median)
print(mode)
print(rng)

3. 풀이 과정

리스트로 값들을 집합으로 묶고 하나씩 해결한다.

산술 평균은 반올림을 해야 하기 때문에 round()로 평균을 묶는다.

중앙값은 sort()로 정렬시킨 후, 중앙값의 인덱스 N//2에 있는 값을 불러온다.

최빈값은 Counter 패키지를 받아서 nums의 값들의 빈도 수를 해시맵 형태로 계산한다.

최빈값을 max()로 values() 값들 중 찾아서 저장한다.

최빈값의 여러개 일때의 경우를 해결하기 위해서 modes 변수에 items()로 cnt를 받아 값 f가 최빈값과 같은 x들로 리스트를 선언한다.

modes를 sort()로 정렬시킨 후, 최빈값이 1개인 경우에는 1번째 modes[0]을 저장하고, 2개 이상인 경우에는 2번째 modes[1]을 저장한다.

범위는 끝값 nums[-1]에서 초기값 nums[0]을 빼서 계산한다.

이후 정의된 값들을 출력하면 된다.

반응형