본문 바로가기
알고리즘

[알고리즘 문제] 대푯값 (Python / 파이썬)

by yewonnie 2022. 5. 25.

문제

어떤 수들이 있을 때, 그 수들을 대표하는 값으로 가장 흔하게 쓰이는 것은 평균이다. 평균은 주어진 모든 수의 합을 수의 개수로 나눈 것이다. 예를 들어 10, 40, 30, 60, 30, 20, 60, 30, 40, 50의 평균은

이 된다.
평균 이외의 또 다른 대표값으로 최빈값이라는 것이 있다. 최빈값은 주어진 수들 가운데 가장 많이 나타나는 수이다. 예를 들어 10, 40, 30, 60, 30, 20, 60, 30, 40, 50 이 주어질 경우, 30 이 세 번, 40 과 60 이 각각 두 번, 10, 20, 50 이 각각 한 번씩 나오므로, 최빈값은 30 이 된다. 열 개의 자연수가 주어질 때 이들의 평균과 최빈값을 구하는 프로그램을 작성하시오.

입력

첫째 줄부터 열 번째 줄까지 한 줄에 하나씩 자연수가 주어진다. 주어지는 자연수는 1,000 이하의 10 의 배수이다.

출력

첫째 줄에는 평균을 출력하고, 둘째 줄에는 최빈값을 출력한다. 최빈값이 둘 이상일 경우 그 중 최소값을 출력한다. 평균과 최빈값은 모두 자연수이다.

문제 풀이 

열 개의 10의 배수가 주어질 때 

평균과 최빈값을 구하는 문제이다.

 

평균은 주어진 수의 합을 구하고 수의 개수로 나누면 

쉽게 구할 수 있다.

 

최빈값은 파이썬에서 제공하는 Counter 라이브러리를 사용했다.

Counter 라이브러리는 주어진 원소들이 나타난 개수를 구해 저장해준다.

그 중 most_common() 함수는 원소들이 나타난 개수가 가장 많은 것부터 

정렬하여 리스트로 반환한다.

이때, 문제에서 최빈값이 둘 이상일 경우 그 중 최소값을 출력하라는 조건이 있다.

most_common() 함수는 최빈값이 둘 이상일 경우 먼저 입력된 순서대로

원소를 정렬하기 때문에 원소를 따로 오름차순으로 정렬해주어야 한다. 

따라서 최빈값을 구하기 전 원소를 먼저 오름차순으로 정렬해준 뒤 Counter 라이브러리를 사용했다.


My Code

from collections import Counter

# 10개의 10의 배수 
array = []
for _ in range(10):
    array.append(int(input()))

# 평균
avg = sum(array) // 10

# 최빈값 중 가장 작은 원소 구하기 위해 오름차순 정렬
array.sort()
# array를 등장 횟수가 가장 많은 순서로 정렬해 리스트로 저장
new = Counter(array).most_common()

print(avg)
print(new[0][0])

댓글