문제
풀이
- 옛날에 작성해 통과했던 코드가 테스트코드 추가로인해 실패되었다는 알림을 보고 다시 풀어보았다.
예전 코드 (테스트 코드 추가로 인해 현재로서는 80% 쯤에서 실패됨)
import sys
from collections import Counter
N = int(sys.stdin.readline())
nums = [int(sys.stdin.readline()) for _ in range(N)]
nums.sort()
top_num = Counter(nums).most_common()
print("%.f"%(sum(nums)/N))
print(nums[N//2])
if len(nums) > 1:
if top_num[0][1] == top_num[1][1]:
print(top_num[1][0])
else:
print(top_num[0][0])
else:
print(nums[0])
print(nums[-1] - nums[0])
변경 코드 (성공)
import sys
input = sys.stdin.readline
def get_avgs(n: int, nums: list) -> int:
return int(round(sum(nums) / n, 0))
def get_middle(n: int, nums: list) -> int:
return sorted(nums)[n // 2]
def get_frequently_num(n: int, nums: list) -> int:
if n == 1:
return nums[0]
dict = {}
for num in nums:
if num not in dict:
dict[num] = 1
else:
dict[num] += 1
sort_dict = sorted(dict.items(), key=lambda x: (x[1], -x[0]), reverse=True)
return sort_dict[1][0] if sort_dict[0][-1] == sort_dict[1][-1] else sort_dict[0][0]
def get_range(nums: list) -> int:
return max(nums) - min(nums)
def solve(n: int, nums: list):
print(get_avgs(n, nums))
print(get_middle(n, nums))
print(get_frequently_num(n, nums))
print(get_range(nums))
if __name__ == '__main__':
n = int(input())
nums = [int(input()) for _ in range(n)]
solve(n, nums)
결과
출처 & 깃허브
https://www.acmicpc.net/problem/2108
github