[codeup] 4536 : 대표값
문제
https://codeup.kr/problem.php?id=4536&rid=0
문제1) 대표값(중등1, 고등1)
어떤 수들이 있을 때, 그 수들을 대표하는 값으로 가장 흔하게 쓰이는 것은 평균이다. 평균은 주어진 모든 수의 합을 수의 개수로 나눈 것이다. 예를 들어 10,40,30,60,30,20,60,30,40,50의 평균은
(10+40+30+60+30+20+60+30+40+50)÷10=370÷10=37
평균 이외의 또 다른 대표값으로 최빈값이라는 것이 있다. 최빈값은 주어진 수들 가운데 가장 많이 나타나는 수이다. 예를 들어 10,40,30,60,30,20,60,30,40,50이 주어질 경우
30이 세 번,
40과 60이 각각 두 번,
10,20,50이 각각 한 번씩 나오므로,
최빈값은 30이 된다.
열 개의 자연수가 주어질 때 이들의 평균과 최빈값을 구하는 프로그램을 작성하시오.
입력
첫 째 줄부터 열 번째 줄까지 한 줄에 하나씩 자연수가 주어진다. 주어지는 자연수는 1,000보다 작은 10의 배수이다.
입력 예시
10
40
30
60
30
20
60
30
40
50
출력
첫째 줄에는 평균을 출력하고, 둘째 줄에는 최빈값을 출력한다. 최빈값이 둘 이상일 경우 그 중 하나만 출력한다. 평균과 최빈값은 모두 자연수이다.
출력 예시
37
30
문제 풀이
평균값을 구하는 것은 어렵지 않았는데, "최빈값"을 구하는 데에 시간이 많이 들었다.
일단 푸는 방법은 2가지가 있다.
- dict 을 만들어서 직접 숫자가 몇 번 나오는지 센 후, 그 값을 value로 저장하는 방법
- Counter 클래스를 사용하는 방법
이것저것 서치를 해보니 리스트를 만들고, 해당 index에 빈도수 값을 저장하여 하는 방법도 있었는데 이건 가짓수가 많아지면 비효율적이라고 생각해서 해당 방향으로는 풀이하지 않았다.
일단 dict를 만들어, 해당 dict를 내림차순으로 정렬하고 그 첫번째 값을 가져왔다.
numArr = []
for i in range(10):
numArr.append(int(input()))
def Average_Num(numArr):
sum = 0
for i in range(len(numArr)):
sum += int(numArr[i])
return int(sum/len(numArr))
def find_max_num(array):
count_num = {}
for num in array:
if num not in count_num:
count_num[num] = 0
count_num[num] += 1
count_num = sorted(count_num.items(), key=lambda x: x[1], reverse=True)
return count_num[0][0]
print(Average_Num(numArr))
print(find_max_num(numArr))
- Counter 클래스 사용
from collections import Counter
def find_max_num(array):
counter = Counter(array)
max_count = -1
for letter in counter:
if counter[letter] > max_count:
max_count = counter[letter]
max_letter = letter
return max_letter
Author And Source
이 문제에 관하여([codeup] 4536 : 대표값), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@woonmong/codeup-4536-대표값저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)