코드

input() 사용 (Pypy3)

from collections import Counter

n = int(input())
nums = []

for _ in range(n):
    nums.append(int(input()))

nums.sort()

# 산술 평균
print(int(round((sum(nums)/n), 0)))

# 중앙값
print(nums[n // 2])

# 최빈값
ls = Counter(nums).most_common(2)
if (len(ls) > 1):
    if ls[0][1] == ls[1][1]:
        print(ls[1][0])
    else:
        print(ls[0][0])
else:
    print(ls[0][0])


# 범위
print(max(nums) - min(nums))

sys.stdin.readline() 사용

# 주피터 노트북에서 sys.stdin.readline()은 안됨
import sys
from collections import Counter
n = int(sys.stdin.readline())
nums = []

for _ in range(n):
    nums.append(int(sys.stdin.readline()))

nums.sort()

# 산술 평균
print(int(round((sum(nums)/n), 0)))

# 중앙값
print(nums[n // 2])

# 최빈값
# 2번째 최빈값까지 구하기
ls = Counter(nums).most_common(2)
if (len(ls) > 1):
    if ls[0][1] == ls[1][1]:
        print(ls[1][0])
    else:
        print(ls[0][0])
else:
    print(ls[0][0])


# 범위
print(max(nums) - min(nums))

문제 설명

최빈수를 제외한 나머지는 너무 간단하고, 최빈수의 경우 애를 먹었는데 Counter 라이브러리를 활용하는 방법이 가장 좋은 것 같다.

Counter API 참고

most_common(2)로 최빈값을 2번째까지 구하고 조건식으로 비교하여 정답을 도출하면 된다. 이 때, most_common함수는 List로 반환되는데 최빈값이 1개인 경우의 조건을 따로 처리하지 않아서 에러를 겪었다.

또한 Python3으로 제출하면 시간 초과가 떠서 sys.stdin.readline()을 사용하여 Python3으로도 정답을 완성했다. (참고로 Jupyter Notebook에선 sys.stdin.readline()이 작동하지 않는다…)

댓글남기기