Algorithm/백준

[BOJ] 2592 - 대표값

비번변경 2021. 12. 24. 15:06

문제

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 함수를 이용해 그 값을 출력할 수 있다.

 

 


참고 문서

https://codingdojang.com/scode/612