728x90
Overview
- 체감 난이도: ★☆☆☆☆
- 문제 레벨: 실버 3
- 문제 유형: 정렬, 구현, 수학
- 풀이 상태: 답안참고 / 스스로 해결 -> Counter 자료구조 사용
- 추후: 다시 풀어보기 / 간단 복습 / 완벽 이해
[문제]
[코드]
최빈값을 구하는 것 이외(산술평균, 중앙값, 범위)에는 간단하게 구현할 수 있다.
최빈값은 Counter함수를 사용했다.
최빈값 구하는 방법 두 가지
1. stsatistics 라이브러리 사용
- 최빈값이 여러 개일 경우 첫 번째 값만 반환한다.
import statistics
data = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5]
print(statistics.mode(data)) # 4
data = [6, 6, 6, 6, 6, 6, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5]
print(statistics.mode(data)) # 6
2. Counter 클래스 사용
- 전체 원소의 각 개수를 세어준다. -> 딕셔너리 형태로 저장(각 요소(key), 등장 횟수(value))
* most_common() 메서드
- 가장 많이 등장한 요소를 빈도수 기준으로 정렬된 리스트를 반환한다. (튜플)
- most_common(n): 상위 n개만 반환 가능
from collections import Counter
data = [6, 6, 6, 6, 6, 6, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5]
print(Counter(data))
# Counter({6: 6, 4: 4, 3: 3, 2: 2, 5: 2, 1: 1})
print(Counter(data).most_common())
# [(6, 6), (4, 4), (3, 3), (2, 2), (5, 2), (1, 1)]
print(Counter(data).most_common(1))
# [(6, 6)]
* 최빈값이 여러 개일 경우 두 번째로 작은 값 찾기
from collections import Counter
nums = [1, 1, 2, 2, 3, 3]
counter = Counter(nums)
most_common_list = counter.most_common()
max_count = most_common_list[0][1] # 최빈값의 빈도수
# 최빈값 후보 리스트 만들기
modes = [num for num, count in most_common_list if count == max_count]
# 최빈값이 여러 개이면 두 번째 작은 값 선택
print(modes[1] if len(modes) > 1 else modes[0])
[최종 코드]
import sys
from collections import Counter
input = sys.stdin.readline
N = int(input())
nums = [int(input()) for _ in range(N)]
nums.sort()
# 산술평균 (소수점 첫째 자리에서 반올림)
print(round(sum(nums) / N))
# 중앙값
print(nums[N // 2])
# 최빈값 찾기
counter = Counter(nums).most_common() # 빈도수 내림차순 정렬
max_count = counter[0][1] # 최빈값의 빈도수
# 빈도수가 가장 높은 값들만 필터링
modes = [num for num, count in counter if count == max_count]
# 최빈값 -> 여러 개가 있을 경우 두 번째로 작은 값 선택
print(modes[1] if len(modes) > 1 else modes[0])
# 범위 출력
print(nums[-1] - nums[0])
반응형
'🚩 Coding Test > Baekjoon' 카테고리의 다른 글
[BOJ][Python] 7568 덩치 (0) | 2025.02.07 |
---|---|
[BOJ][Python] 26265 멘토와 멘티 (0) | 2025.02.05 |
[BOJ][Python] 1018 체스판 다시 칠하기 (0) | 2025.02.01 |
[BOJ][Python] 20153 영웅이는 2의 거듭 제곱을 좋아해! (0) | 2025.01.20 |
[BOJ][Python] 32344 유물 발굴 (0) | 2025.01.18 |