문제
풀이
import sys, math
from collections import Counter
input = sys.stdin.readline
# 산술평균, 중앙값, 최빈값, 범위(최댓값 - 최솟값) 출력
n = int(input())
arr = []
for _ in range(n):
arr.append(int(input()))
arr.sort()
avg = round(sum(arr) / len(arr))
median = arr[len(arr) // 2]
print(avg)
print(median)
cnt = Counter(arr).most_common()
if len(cnt) > 1 and cnt[0][1] == cnt[1][1]:
print(cnt[1][0])
else:
print(cnt[0][0])
diff = max(arr) - min(arr)
print(diff)
중앙값을 찾기 위해 입력 받은 배열을 정렬해준다.
최빈값은
max(set(arr), key=arr.count)
위 코드처럼 count를 key로 이용해서 찾아주면 되는데 여기서 최빈값이 여러개 있을 때 두 번째로 작은 값을 찾는 것에서 헤맸다.
cnt = Counter(arr).most_common()
print("cnt:", cnt)
if len(cnt) > 1 and cnt[0][1] == cnt[1][1]:
print(cnt[1][0])
else:
print(cnt[0][0])
[참고] 파이썬 collections 모듈의 Counter 사용법
Counter(arr).most_common()
most_common()이라는 메서드는 데이터의 개수가 많은 순으로 정렬된 배열을 반환한다.
정답 코드에서는 이 정렬된 배열을 받아서 최빈값이 여러 개일 때 만약 첫 번째와 두 번째 최빈값이 동일하다면 두 번째 값을 출력한다.
예시)
from collections import Counter
Counter('hello world').most_common()
[('l', 3), ('o', 2), ('h', 1), ('e', 1), (' ', 1), ('w', 1), ('r', 1), ('d', 1)]
참고
https://stackoverflow.com/questions/1518522/find-the-most-common-element-in-a-list
'Algorithms > 코테 문풀' 카테고리의 다른 글
[백준 11724번] 연결 요소의 개수 - Python, DFS/BFS (1) | 2024.03.12 |
---|---|
[백준 2667번] 단지번호붙이기 - Python (0) | 2024.03.09 |
[백준 11866번] 요세푸스 문제 0 (0) | 2023.10.10 |
[백준 1920번] 수 찾기, 이진 탐색 알고리즘 (1) | 2023.10.09 |
[백준 2503번] 숫자 야구, 반례 (0) | 2023.09.14 |