문제
https://www.acmicpc.net/problem/2592
열 개의 자연수가 주어질 때 이들의 평균값과, 가장 많이 나타나는 최빈값을 구하은 프로그램을 작성하라
첫째 줄에는 평균을, 둘째 줄에는 최빈값을 출력한다. 최빈값이 둘 이상인 경우에는 그중 하나만을 출력한다.
풀이
1. 열 개의 자연수를 입력받아 배열로 저장한다.
2. 배열 내 값을 키로, 그 값의 개수를 값으로 하는 딕셔너리를 생성한다.
3. 딕셔너리의 키 배열에서, 그 키의 값과 딕셔너리의 값 배열의 최대값이 같으면 해당 키가 최빈값이다.
내 코드
import sys
l = []
for i in range(10):
l.append(int(sys.stdin.readline()))
freq = {x: l.count(x) for x in set(l)}
for x in freq.keys():
if freq[x] == max(freq.values()):
v = x
print(sum(l) // len(l))
print(v)
코드에 문제는 없지만, 이 코드를 좀 더 파이썬답게(?) 수정해본다.
import sys
l = [int(sys.stdin.readline()) for _ in range(10)]
freq = {x: l.count(x) for x in set(l)}
print(sum(l) // len(l))
print(next(x for x in freq.keys() if freq[x] == max(freq.values())))
generator는 next 함수를 이용해 그 값을 출력할 수 있다.
참고 문서