알고리즘
[백준 2108] 통계학 - 구현, 정렬
kyeongjun-dev
2022. 1. 3. 11:43
코드1 - Counter만 사용
import sys
from collections import Counter
def solution(arr):
# round : 소수점에서 반올림한 평균 출력
print(round(sum(arr)/len(arr)))
# 홀수개인 원소 중, 가장 가운데 있는 원소 출력
print(arr[len(arr)//2])
# Counter : 원소값이 각각 몇개 있는지 분류
cd = Counter(arr)
# 최빈값의 횟수를 저장
max_num = max(cd.values())
cnt_arr = []
# 최빈값에 해당하는 key를 cnt_arr에 저장
for key in cd.keys():
if cd[key] == max_num:
cnt_arr.append(key)
# 최빈값에 해당하는 수가 여러개면, 두 번째수[1]를 출력
# 최빈값에 해당하는 수가 한 개라면 첫 번째수[0]를 출력
if len(cnt_arr) >= 2:
cnt_arr.sort()
print(cnt_arr[1])
else:
print(cnt_arr[0])
# 정렬되어 있는 arr의 마지막 수와 첫 번째 수의 차이를 출력
print(abs(arr[-1] - arr[0]))
n = int(input())
arr = []
for _ in range(n):
arr.append(int(sys.stdin.readline()))
arr.sort()
solution(arr)
코드2 - Counter의 most_common 사용
import sys
from collections import Counter
def solution(arr):
# round : 소수점에서 반올림한 평균 출력
print(round(sum(arr)/len(arr)))
# 홀수개인 원소 중, 가장 가운데 있는 원소 출력
print(arr[len(arr)//2])
# Counter.most_common : 최빈값인 key, value 쌍을 두 개 저장
cd = Counter(arr).most_common(2)
# 최빈값 value를 갖는 쌍이 두 개면, 두 번째로 작은 key를 출력
# 최빈값 value를 갖는 쌍이 한 개면, key를 출력
if len(cd) >= 2 and cd[0][1]==cd[1][1]:
print(max(cd[0][0], cd[1][0]))
else:
print(cd[0][0])
# 정렬되어 있는 arr의 마지막 수와 첫 번째 수의 차이를 출력
print(abs(arr[-1] - arr[0]))
n = int(input())
arr = []
for _ in range(n):
arr.append(int(sys.stdin.readline()))
arr.sort()
solution(arr)
설명
- Counter의 most_common은 대상이 되는 배열의 최빈값이 한개 더라도 오류가 발생하지 않는다.
- 예를들어, [1, 1, 1, 1,] 이면 Counter의 결과로 {1:4} 가 반환되는데, 여기서 most_common(2)를 하면 [(1,4)]가 반환된다.